-1

SQL Server 2012 に次のクエリがあります。

SELECT CASE WHEN count(*) = 0 THEN 1 ELSE 0 END
FROM Table1
WHERE ('20131104 00:00:00' > end_date OR '20141104 29:59:59' < start_date)

Table1 end_dateおよびstart_date両方とも日時であり、null ではありません。なぜエラーが発生するのかわかりません標準の varchar 日時形式 (またはそうでない?)。日付の時間部分を削除すると、クエリは正常に機能します。

4

2 に答える 2

9
29:59:59

おそらく23歳のはずですよね?

于 2013-11-05T13:52:25.343 に答える
2

SQL Server のすべてのバージョンの安全な形式はYYYY-MM-DD'T'hh:mm:ss、次のようになります。

 WHERE ('2013-11-04T00:00:00' > end_date OR '2014-11-04T23:59:59' < start_date)

(Colm が指摘しているように、29 は 23 であるべきです)。

また、このクエリが完全に正しいとは思いません。2014-11-04T23:59:59 は、2014-11-04T23:59:59.537 など、最後の 1 分間にミリ秒の値を持つものをすべて省略します。私は通常、datetime を連続として扱うことをお勧めします。したがって、セミオープン間隔に切り替えますが、現在の比較ではそれを調整できません。予想されるものは次のとおりです。

 WHERE ('2013-11-04T00:00:00' >= end_date OR '2014-11-05T00:00:00' < start_date)

どちらも真夜中の日付なので、次のようになります。

 WHERE ('20131104' >= end_date OR '20141105' < start_date)

(どちらの場合も、end_date比較を に切り替えたことに注意して>=ください)。

于 2013-11-05T13:52:44.817 に答える