Какой формат даты ожидает Oracle/Toad?

В редакторе Toad у меня есть этот SQL:

SELECT INTERLOPERABCID,AVAILABLEDATE,
AVAILABLEQHR,CARPHONEID,
TRUNC((AVAILABLEQHR-1)/12) "COL",
MOD(AVAILABLEQHR-1,12) "ROW"
FROM ABC.INTERLOPERAVAILABILITY
WHERE INTERLOPERABCID>42
AND AVAILABLEDATE='09/Apr/2012'

... но он не возвращает строк, хотя я вижу много записей в таблице, значение AVAILABLEDATE = '9/4/2012'

Формат даты («09/Apr/2012»; я также пробовал «04/Sep/2012») выглядит странно, но, по крайней мере, я не получаю с ним ошибки компиляции/выполнения. Когда я попробовал "09.04.2012" и "09.04.2012", мне сказали "ORA-01853: недопустимый месяц"

Как я должен ввести дату, чтобы сказать, что я хочу видеть даты 9 апреля 2012 года?


person B. Clay Shannon    schedule 18.04.2012    source источник
comment
Формат даты зависит от параметра NLS_DATE_FORMAT, который зависит от NLS_TERRITORY. Оба могут быть специфичными для сеанса. Никогда не полагайтесь на формат даты «по умолчанию», используйте правильную маску даты в функциях to_date.   -  person ik_zelf    schedule 18.04.2012


Ответы (2)


Безопаснее всего использовать TO_DATE:

AND AVAILABLEDATE = TO_DATE('09/Apr/2012', 'DD/Mon/YYYY')
person cagcowboy    schedule 18.04.2012

Мне нравится использовать литерал даты:

SELECT INTERLOPERABCID,AVAILABLEDATE,
AVAILABLEQHR,CARPHONEID,
TRUNC((AVAILABLEQHR-1)/12) "COL",
MOD(AVAILABLEQHR-1,12) "ROW"
FROM ABC.INTERLOPERAVAILABILITY
WHERE INTERLOPERABCID>42
AND AVAILABLEDATE = DATE '2012-04-09'

Вы уверены, что в ваших датах нет времени?

person Cade Roux    schedule 18.04.2012
comment
Тип данных — «Дата», и для этого столбца в базе данных нет элемента времени. - person B. Clay Shannon; 18.04.2012
comment
Оба ответа работают, так что какой из них выбрать в качестве ответа, было жеребьевкой. - person B. Clay Shannon; 18.04.2012
comment
Довольно необычно то, что перед датой нужно указывать спецификатор типа DATE. Я бы никогда не ожидал этого, поскольку я предполагал, что оракул будет достаточно умен, чтобы использовать его или что-то еще, как это делает сервер sql. - person t3chb0t; 02.03.2016