次のクエリは、日時フィールドを更新しません。
update table
SET EndDate = '2009-05-25'
WHERE Id = 1
私もダッシュなしで試しましたが、それでもうまくいきません。
疑わしい場合は、- CAST/CONVERTを使用したデータ型変換について明示的に :
UPDATE TABLE
SET EndDate = CAST('2009-05-25' AS DATETIME)
WHERE Id = 1
通常、それは動作するはずです。
しかし、これを試すことはできますか?自宅のPCにSQLがありません。自分で試すことはできません
UPDATE table
SET EndDate = '2009-05-25 00:00:00.000'
WHERE Id = 1
文字列リテラルは、現在の日付形式の設定に従ってパスされます。 SET DATEFORMAT
を参照してください。常に機能する1つの形式は「20090525」です。
もちろん、今度は「動作しない」と定義する必要があります。レコードは更新されませんか?おそらくId=1
はどのレコードとも一致しません...
「1つのレコードが変更されました」と表示されている場合は、確認方法を示す必要があります...
DateTimeパラメーターを使用するのが最善の方法です。ただし、DateTimeを文字列として渡したい場合は、言語に依存しない形式が使用されていれば、CASTは必要ありません。
例えば.
次のように作成されたテーブルがあるとします:
create table t1 (id int, EndDate DATETIME)
insert t1 (id, EndDate) values (1, GETDATE())
以下は常に機能するはずです:
update t1 set EndDate = '20100525' where id = 1 -- YYYYMMDD is language agnostic
以下が機能します:
SET LANGUAGE us_english
update t1 set EndDate = '2010-05-25' where id = 1
ただし、これはできません。
SET LANGUAGE british
update t1 set EndDate = '2010-05-25' where id = 1
これは、「YYYY-MM-DD」が言語に依存しない形式ではないためです(SQLサーバーの観点から)。
ISO 'YYYY-MM-DDThh:mm:ss'形式も言語に依存せず、ゼロ以外の時間を渡す必要がある場合に役立ちます。
詳細: http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes
UPDATE TABLE
SET EndDate = CAST('2017-12-31' AS DATE)
WHERE Id = '123'
これは機能するはずです。予約語であるため、[日付]を角かっこで囲みます。
時間の指定に興味がない場合は、 'DD/MM/YYYY'の形式を使用することもできますが、Conversionメソッドに固執し、関連するISO形式。デフォルト値の使用は実際に避けてください。
以下に例を示します。
SET startDate = CONVERT(datetime,'2015-03-11T23:59:59.000',126) WHERE custID = 'F24'
テーブルにそれを戻すトリガーがあるのでしょうか?