Teradata - 为FIELD提供的无效日期

时间:2010-09-28 21:01:32

标签: sql teradata

我正在尝试查询具有varchar(100)“VALUE”列的表。此列可以包含字母,数字或本日期中的任何内容。

日期将始终在表格中输入为“YYYY-mm-dd”。但是,当我运行以下查询时:

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

我收到以下错误:

Invalid date supplied for myTable.VALUE.

值表的示例: (1, '122') (2, '红') (3, '2009-12-11')

关于可能导致这种情况的任何想法?

谢谢!

4 个答案:

答案 0 :(得分:2)

如果数据类型声明为varchar,它应该像对待字符串一样对待它。 尽量不要指定有关日期格式的任何内容,例如

select * from myTable
where VALUE =  '2009-12-11'

答案 1 :(得分:0)

如果您对查询运行说明,则可以看到它在与您提供的值进行比较之前的转换值。如果您有另一列准确记录VALUE中的内容类型,则可以将其添加到where子句中,您将不再收到错误(请参阅下文)。否则,请遵循Beth的建议。

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

答案 2 :(得分:0)

Teradata内部日期计算为(year - 1900) * 10000 + (month * 100) + day

因此,如果日期是02/11/2009(2010年11月2日),那么

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

所以2009年11月2日作为1091102存储在Teradata中。 您可以通过强制转换以所需的格式提取它(因为你在varchar中有它)。希望这会有所帮助。

答案 3 :(得分:0)

VALUE是否可能是Teradata中的保留字? 如果是这样,你需要把它放到双引号中:

select * 
from myTable
where "VALUE" = '2009-12-11'