2014-05-23 2 views
0

Есть таблица «user_order» с столбцами «user_id», «code» (символ меняется) и created_date_key (целое число). Я пытаюсь написать запрос, который отображает все записи для кода 26 и даты больше, чем '12 -5-2013 23:59:59 '.POSTGRESQL: Ошибка: формат даты не распознан

Select * 
from user_order 
where code like 26 ::text 
and to_date(created_date_key ::text, 'YYYY-MM-DD') > to_date ('12-5-2013 23:59:59' ::text, 'YYYY-MM-DD') 

ОШИБКА: формат даты не распознается.

+2

Почему вы хранить метку времени как 'integer'? 'to_date()' преобразует строку ('varchar',' text') в дату. Вы не можете передать ему целое число. Подумайте об этом: как целое число, даже если оно было добавлено в строку, возможно, имеет формат '' YYYY-MM-DD'' –

+0

Предполагая, что ваше целое является временной отметкой Unix или аналогичной (секунд с эпохи), вы должны найти то, что вам нужно здесь : http://stackoverflow.com/questions/18747317/postgres-compare-timestamp-with-long-unix-timestamp и здесь: http://stackoverflow.com/questions/12328817/postgres-how-do-i-format -an-int-timestamp-as-readable-date-string – IMSoP

ответ

0
select * 
    from user_order 
where code like 26 ::text 
    and to_date(created_date_key ::text, 'YYYY-MM-DD') > '12-5-2013 23:59:59' 
+1

Просьба дать некоторое объяснение вашего ответа, а не только SQL. – Kevin

+0

'to_date (created_date_key :: text, 'YYYY-MM-DD')' не будет работать, и это именно то, что Rohit уже пробовал. –

+0

Преобразование целочисленной даты на дату (от 1-го до строки и затем до даты), так как вы не можете преобразовать число непосредственно на дату, а затем проверить, превышает ли указанную дату значение '12 -5-2013 23:59:59 ' – DUnkn0wn1

1

created_date_key должен быть меткой времени, а не целым числом.

+0

Я не могу изменить структуру таблицы. Так оно и было. Просто помогите мне с предложением select. – DUnkn0wn1

+0

Попробуйте удалить тире: Вместо YYYY-MM-DD используйте этот формат: YYYYMMDD – daminufe

0

Значения строк должны быть включены в одинарные кавычки. Вам не нужно указывать текст для преобразования типа данных. Функция to_timestamp используется для преобразования текстовых данных в значение timestamp. Следующий запрос будет выбрать необходимые данные:

Select * 
from user_order 
where code = '26' 
and created_date_key > to_timestamp ('12-5-2013 23:59:59', 'MM-DD-YYYY HH24:MI:SS'); 

Ссылки:

  1. SELECT on PostgreSQL Manual. На этой странице представлено множество примеров.
  2. Data Type Formatting Functions on PostgreSQL Manual
+0

created_date_key is целое число. Вы пытаетесь сравнить целое число с меткой времени. – DUnkn0wn1

Смежные вопросы