0

日付の有効期限が切れた (つまり、現在よりも短い) ときに SQL DB を更新しようとしています。この素敵な SQL コードがあります。

Update Notifications 
SET Active = 'N' 
where CAST(SetDate AS DATE) <= CAST('2012-08-23 11:19:00 +0000' AS DATE)

ただし、すべてのレコードを更新します (日付が現在よりも遅くない場合でも)

私も試してみました

Update Notifications 
SET Active = 'N' 
where CAST(SetDate AS DATE) < CAST('2012-08-23 11:19:00 +0000' AS DATE)

しかし、これはどの行にも影響しません。

私は少し混乱していると思いますか?

助けて?

ありがとう

4

2 に答える 2

2

次の行を除いて、コードに奇妙な点は見当たりません。

CAST('2012-08-23 11:19:00 +0000' AS DATE)

を使用CAST()して日付に変更する場合、値の時間部分を渡す必要はありません。

完全なテーブル スキーマは提供していませんが、考慮すべき点の 1 つはbit、値にフィールドを使用することY/Nです。

これは、コードが機能するSQLフィドルです

Update Notifications 
SET Active = 'N' 
where CAST(SetDate AS DATE) <= CAST('2012-08-23' AS DATE)
于 2012-08-23T10:48:17.460 に答える
0

あなたが混乱しているのは、SQL の型です。どのデータベースを使用しているかはわかりませんが、おそらく boolean (または int) と date の型があります。ブール値と日付を文字列として格納するのは非常に非効率的です。たとえば、例が機能したとしても、データベース全体をスキャンし、比較するために各値をキャストする必要があります。

エラーの手がかりは<vs<=です。これは、値が等しいことを示唆しています。キャストが両側で失敗し、デフォルト値のゼロを返す場合、その後は等しくなります。

正しいタイプを使用するようにスキーマを変更する必要があります。そうすれば、クエリが機能します。

于 2012-08-23T10:44:06.373 に答える