Teradata - неверная дата для поля - PullRequest
2 голосов
/ 29 сентября 2010

Я пытаюсь запросить таблицу, в которой есть столбец VALAR (100) VALUE.В этом столбце может содержаться что угодно: буква, цифра или, в данном случае, дата.

Дата всегда будет указываться в таблице как «ГГГГ-мм-дд».Однако, когда я запускаю следующий запрос:

select * from myTable
where VALUE =  '2009-12-11' (Date, Format 'yyyy-mm-dd')  

, я получаю следующую ошибку:

Invalid date supplied for myTable.VALUE.

Пример таблицы значений: (1, '122') (2, 'red ') (3,' 2009-12-11 ')

Есть идеи, что может быть причиной этого?

Спасибо!

Ответы [ 4 ]

2 голосов
/ 29 сентября 2010

если тип данных объявлен как varchar, он должен обрабатывать его как строку. попробуйте не указывать ничего о формате даты, например

select * from myTable
where VALUE =  '2009-12-11'
0 голосов
/ 28 декабря 2010

Возможно ли, что VALUE является зарезервированным словом в Teradata?Если это так, вам нужно поместить это в двойные кавычки:

select * 
from myTable
where "VALUE" = '2009-12-11'
0 голосов
/ 28 декабря 2010

Teradata внутренняя дата расчета составляет (year - 1900) * 10000 + (month * 100) + day.

То есть, если дата 02/11/2009 (2 ноября 2010 г.), тогда

=(2009-1900) * 10000 + (11 * 100) + 2
=109 * 10000 + 1100 + 2
=1090000 + 1100 + 2    
=1090000
    1100
       2
----------
 1091102
----------

Таким образом, 2 ноября 2009 года хранится в Teradata как 1091102. Вы можете извлечь его в нужном формате путем приведения (как у вас есть в varchar). Надеюсь, это поможет.

0 голосов
/ 30 сентября 2010

Если вы выполните объяснение по запросу, вы увидите, что оно приводит к приведению значения к дате, прежде чем сравнивать его с предоставленным значением.Если у вас есть другой столбец, в котором точно указывается тип значения VALUE, вы можете добавить его в предложение where, и вы больше не получите сообщение об ошибке (см. Ниже).В противном случае следуйте рекомендации Бет.

select * from myTable
where VALUE =  '2009-12-11' (Date, Format 'yyyy-mm-dd')
and VALUE_TYPE = 'DATE';
...