2010-09-28 39 views
2

我想查询具有varchar(100)“VALUE”列的表。本专栏可容纳任何字母,数字或本例中的日期。Teradata - 无效的日期提供FIELD

日期将始终作为'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')

有什么想法可能会导致这种情况?

谢谢!

回答

2

如果数据类型声明为varchar,则应该将其视为字符串。 尽量不要指定有关日期格式任何东西,像

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

如果您运行的查询的解释,你可以看到,它的对你提供的值进行比较之前铸造的价值日期。如果您有另一列可以准确记录VALUE中的内容的类型,则可以将其添加到where子句中,并且不会再出现错误(请参阅下文)。否则,请与贝丝的建议。

select * from myTable 
where VALUE = '2009-12-11' (Date, Format 'yyyy-mm-dd') 
and VALUE_TYPE = 'DATE'; 
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日通过铸造存储在Teradata数据为1091102. 可以在需要的格式提取出来(如u有它在varchar)。希望这可以帮助。

0

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

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