このクエリは機能しません:
(CASE WHEN CONVERT(VARCHAR(8),Time,3) IN ('31/12/99') THEN 'NA' ELSE Time END)
私は得る
文字列から日時を変換する際に変換に失敗しました
このクエリは機能しません:
(CASE WHEN CONVERT(VARCHAR(8),Time,3) IN ('31/12/99') THEN 'NA' ELSE Time END)
私は得る
文字列から日時を変換する際に変換に失敗しました
(ではなく)実際に必要 な場合は、おそらく使用する必要がありますNULL
'NA'
NULLIF
SELECT NULLIF(time,'99991231')
SQL Server が 2 桁の年のカットオフで構成されていると想定しているため、年99
は1999
. 別の年99
を念頭に置いていた場合は、考えていた年に変更1999
してください。
タイトルを読み直して、1999 年 (または 2099 年) ではなく、9999 年を使用したいと考えています。このような場合は、実際には 4 桁の年を使用する必要があります。
time
日付だけでなく時間コンポーネントもある場合は、保証される可能性がありますが、文字列としてではなく値CASE
として比較を行う方が良いでしょう:datetime
CASE WHEN DATEADD(day,DATEDIFF(day,0,Time),0) = '99991231' THEN NULL ELSE Time END
@KaR が指摘しているように -'NA'
ではなくテキストが必要な場合は、文字列NULL
に変換する必要がありますTime
-CASE
式は単一の戻り値の型しか持てません。datetime
varchar
問題は、ケースクエリが2つの異なるタイプを返すことです。
したがって、これを修正するには、[Time]をVarCharタイプとして返す必要があります。
以下のコードを試してください。
CASE WHEN CONVERT(VARCHAR(8), [Time], 3) IN ('31/01/12') THEN 'NA' ELSE CONVERT(VARCHAR(8), [Time], 3) END
try below code....
declare @t1 table(t1 DATETIME)
insert into @t1(t1)
select '9999-12-31 00:00' UNION ALL
select '01-04-2012 11:20' union all
select '9999-12-31 10:00'
select case when dateadd(dd,datediff(dd,0,t1),0) not in('9999-12-31') then t1 end date from @t1