0

このクエリは機能しません:

(CASE WHEN CONVERT(VARCHAR(8),Time,3) IN ('31/12/99') THEN 'NA' ELSE Time END)

私は得る

文字列から日時を変換する際に変換に失敗しました

4

3 に答える 3

1

(ではなく)実際に必要 な場合は、おそらく使用する必要がありますNULL'NA'NULLIF

SELECT NULLIF(time,'99991231')

SQL Server が 2 桁の年のカットオフで構成されていると想定しているため、年991999. 別の年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 は単一の戻り値の型しか持てません。datetimevarchar

于 2012-10-12T06:31:18.473 に答える
0

問題は、ケースクエリが2つの異なるタイプを返すことです。

  • 「NA」はVarCharであり、
  • DateTimeである[Time]。

したがって、これを修正するには、[Time]をVarCharタイプとして返​​す必要があります。

以下のコードを試してください。

CASE WHEN CONVERT(VARCHAR(8), [Time], 3) IN ('31/01/12') THEN 'NA' ELSE CONVERT(VARCHAR(8), [Time], 3) END
于 2012-10-12T03:04:46.680 に答える
0

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
于 2012-10-12T06:48:24.973 に答える