1

Stackoverflowを手伝ってください。この問題については、キーボードのすべての「HULKSMASH」に近づいています。私は注意深く調査しましたが、明らかに何かが正しくありません。

SQL 2005で作業していますが、プロプライエタリツール(Platinum SQL?)から参照されるJulian日付を使用しています。selectステートメントを実行すると、Julianの「特別な」バージョンを日時に変換できます。残念ながら、日時列には挿入されません。試してみると、次のエラーが発生します。

charデータ型をdatetimeデータ型に変換すると、datetime値の範囲外になりました。

そのため、ストアドプロシージャからレポートを実行するための日時基準を設定できません。

元の値:733416同等のカレンダー値:2009年1月9日

以下は私のコードです...私はとても近いですが、何が悪いのかよくわかりません。実際にジュリアン値(733416)を互換性のあるTSQLDATETIME値に変換するためのconvertステートメントが必要です。

SELECT       
org_id, 
CASE WHEN date_applied = 0 THEN '00-00-00' 
ELSE convert(char(50),dateadd(day,date_applied-729960,convert(datetime, '07-25-99')),101) 
END AS date_applied,

CASE WHEN date_posted = 0 THEN '00-00-00'  
ELSE convert(char(50),dateadd(day,date_posted-729960,convert(datetime, '07-25-99')),101) 
END AS date_posted

from general_vw
4

1 に答える 1

1
SELECT       
org_id, 
CASE WHEN date_applied = 0 OR date_applied < 639906 THEN convert(datetime, '1753-01-01')
ELSE dateadd(day,date_applied-729960,convert(datetime, '07-25-99'))
END AS date_applied,

CASE WHEN date_posted = 0 OR date_applied < 639906 THEN convert(datetime, '1753-01-01')
ELSE dateadd(day,date_posted-729960,convert(datetime, '07-25-99'))
END AS date_posted

from general_vw

あなたはcharにキャストしていますが、それが1つの簡単な修正であるように日時が必要です。

また、最小日付として「00-00-00」を使用していましたが、最小TSQL日付は「1753-01-01」です。または、( '1900-01-01')のようなものを使用することもできますが、その場合は、「未満」のdate_applied比較子に変更する必要があります。

「未満」のdate_applied比較子も追加しました。これを「SELECT729960+datediff(day、convert(datetime、'07-25-99')、convert(datetime、 '1753-01-01'))」と計算しました。これより少ない数は、日付のアンダーフローを引き起こします。

于 2010-06-17T03:58:50.793 に答える