我正在尝试查询具有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')
关于可能导致这种情况的任何想法?
谢谢!
答案 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'