次のクエリは、日時フィールドを更新しません。
update table
SET EndDate = '2009-05-25'
WHERE Id = 1
ダッシュなしで試してみましたが、それもうまくいきません。
次のクエリは、日時フィールドを更新しません。
update table
SET EndDate = '2009-05-25'
WHERE Id = 1
ダッシュなしで試してみましたが、それもうまくいきません。
EndDate
列のデータ型は何ですか?
回答:
疑わしい場合は、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つのレコードが変更されました」と表示されている場合は、確認方法を示す必要があります...
SET DATEFORMAT
ローカリゼーションが異なる環境でSQLを作成するときに非常に効果的です
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
時間を指定することに興味がない場合は、「DD / MM / YYYY」の形式を使用することもできますが、変換に固執しますデフォルト値の使用を実際に避ける必要があるため方法とそれに関連するISO形式を使用します。
次に例を示します。
SET startDate = CONVERT(datetime,'2015-03-11T23:59:59.000',126)
WHERE custID = 'F24'