2

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、'red')(3、 '2009-12-11')

これを引き起こしている可能性があるものについてのアイデアはありますか?

ありがとう!

4

4 に答える 4

2

データ型がvarcharとして宣言されている場合は、文字列のように扱う必要があります。日付形式については何も指定しないでください。

select * from myTable
where VALUE =  '2009-12-11'
于 2010-09-28T21:03:03.980 に答える
0

Teradataの内部日付の計算は(year - 1900) * 10000 + (month * 100) + dayです。

したがって、日付が2009年2月11日(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にあるため)。お役に立てれば。

于 2010-12-28T08:43:05.647 に答える
0

クエリでexplainを実行すると、指定された値と比較する前に、現在までの値をキャストしていることがわかります。VALUEにあるもののタイプを正確に記録する別の列がある場合は、それをwhere句に追加すると、エラーが発生しなくなります(以下を参照)。それ以外の場合は、ベスの推奨に従ってください。

select * from myTable
where VALUE =  '2009-12-11' (Date, Format 'yyyy-mm-dd')
and VALUE_TYPE = 'DATE';
于 2010-09-30T12:32:37.457 に答える
0

VALUEそれがTeradataの予約語である可能性はありますか?その場合は、それを二重引用符で囲む必要があります。

選択する *
myTableから
ここで、「VALUE」= '2009-12-11'
于 2010-12-28T09:24:26.533 に答える