特定の形式でデータを受信します。日付は数値(8,0)です。たとえば20120101 = YYYYMMDD
その日付フィールドに(0,1,2,3,6)
のような値を持つ行が存在するため、日付ではありません。
それが日付であるかどうかを確認して変換したいのですが、それ以外の場合はnullでもかまいません。
これで次のコードは機能しますが、もっと良い方法があることを望んでいました。
(CASE WHEN [invoice_date] LIKE '________' --There are 8 underscores
THEN convert(datetime, cast([invoice_date] as char(8)))
END) AS Invoice_Date
どんな助けでもありがたいです。
..のようなisdate関数を使用します。
(CASE WHEN ISDATE (invoice_date) = 1
THEN convert(datetime, cast([invoice_date] as char(8)))
END) AS Invoice_Date
ISDATE関数を使用できますが、日付以外の値はどうなりますか?私が提案する解決策では、nullを返すように選択できます。
select
(case
when ISDATE (invoice_date)=1
then convert(datetime, invoice_date)
else null end) AS Invoice_Date
from your_table
TRY
CATCH
で行くことができます
DECLARE @Source char(8)
DECLARE @Destination datetime
set @Source='07152009'
BEGIN TRY
SET @Destination=CONVERT(datetime,RIGHT(@Source,4) -- YYYY
+LEFT(@Source,2) -- MM
+SUBSTRING(@Source,3,2) -- DD
)
END TRY
BEGIN CATCH
PRINT 'ERROR!!!'
END CATCH
SELECT @Source AS Source, @Destination AS Destination