2010-09-28 42 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'