1

このクエリを実行するとエラーが発生します。

SELECT '06/30/' + 
 CASE WHEN GETDATE() BETWEEN Cast('1/01/' + YEAR(GETDATE()) + ' 12:01:01' As DateTime) And Cast('6/30/' + YEAR(GETDATE()) + ' 12:01:01' as DateTime)
      THEN CAST(
           YEAR(DATEADD(YY, 2, GETDATE())) AS VARCHAR(4))
      WHEN GETDATE() BETWEEN Cast('7/01/' + YEAR(GETDATE()) + ' 12:01:01' As DateTime) And Cast('12/31/' + YEAR(GETDATE()) + ' 12:01:01' as DateTime)
      THEN CAST(
           YEAR(DATEADD(YY, 3, GETDATE())) AS VARCHAR(4))
      END
      AS DateEnding FOR XML RAW

Conversion failed when converting the varchar value '1/01/' to data type int.

4

2 に答える 2

2

テキストと結合しようとするときは、varchar(4) にCAST または CONVERT する必要がありYEAR(GETDATE())ます。そうしないと、代わりにテキストを int に変換しようとします。

SELECT '06/30/' + 
 CASE WHEN GETDATE() BETWEEN Cast('1/01/' + CAST(YEAR(GETDATE()) AS VARCHAR(4)) + ' 12:01:01' As DateTime) And Cast('6/30/' + CAST(YEAR(GETDATE()) AS VARCHAR(4)) + ' 12:01:01' as DateTime)
      THEN CAST(
           YEAR(DATEADD(YY, 2, GETDATE())) AS VARCHAR(4))
      WHEN GETDATE() BETWEEN Cast('7/01/' + CAST(YEAR(GETDATE()) AS VARCHAR(4)) + ' 12:01:01' As DateTime) And Cast('12/31/' + CAST(YEAR(GETDATE()) AS VARCHAR(4)) + ' 12:01:01' as DateTime)
      THEN CAST(
           YEAR(DATEADD(YY, 3, GETDATE())) AS VARCHAR(4))
      END
      AS DateEnding FOR XML RAW
于 2012-12-04T23:46:00.837 に答える
0

JamieSee は VARCHAR(4) へのキャストについて正しいです。より良い方法は、あいまいでない日付を使用してフォーマットすることです。SQL は常に 2012 年 6 月 30 日として 2012 年 6 月 30 日として機能しますが、2012 年 1 月 7 日は 7 月 1 日 (米国形式) または 1 月 7 日 (英国形式) ですか?

SELECT '06/30/' + 
 CASE WHEN GETDATE() BETWEEN Cast(CAST(YEAR(GETDATE()) AS VARCHAR(4)) + '-01-01 12:01:01' As DateTime) And Cast(CAST(YEAR(GETDATE()) AS VARCHAR(4)) + '-06-30 12:01:01' as DateTime)
      THEN CAST(
           YEAR(DATEADD(YY, 2, GETDATE())) AS VARCHAR(4))
      WHEN GETDATE() BETWEEN Cast(CAST(YEAR(GETDATE()) AS VARCHAR(4)) + '-07-01 12:01:01' As DateTime) And Cast(CAST(YEAR(GETDATE()) AS VARCHAR(4)) + '-12-31 12:01:01' as DateTime)
      THEN CAST(
           YEAR(DATEADD(YY, 3, GETDATE())) AS VARCHAR(4))
      END
      AS DateEnding FOR XML RAW
于 2012-12-04T23:55:03.027 に答える