web-dev-qa-db-ja.com

T-SQLでDateTimeフィールドを更新するにはどうすればよいですか?

次のクエリは、日時フィールドを更新しません。

update table
SET EndDate = '2009-05-25'
WHERE Id = 1

私もダッシュなしで試しましたが、それでもうまくいきません。

67
Xaisoft

疑わしい場合は、- CAST/CONVERTを使用したデータ型変換について明示的に

UPDATE TABLE
   SET EndDate = CAST('2009-05-25' AS DATETIME)
 WHERE Id = 1
130
OMG Ponies

通常、それは動作するはずです。

しかし、これを試すことはできますか?自宅のPCにSQLがありません。自分で試すことはできません

UPDATE table
SET EndDate = '2009-05-25 00:00:00.000'
WHERE Id = 1
31

文字列リテラルは、現在の日付形式の設定に従ってパスされます。 SET DATEFORMAT を参照してください。常に機能する1つの形式は「20090525」です。

もちろん、今度は「動作しない」と定義する必要があります。レコードは更新されませんか?おそらくId=1はどのレコードとも一致しません...

「1つのレコードが変更されました」と表示されている場合は、確認方法を示す必要があります...

9
Remus Rusanu

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

8
Moe Sisko
UPDATE TABLE
   SET EndDate = CAST('2017-12-31' AS DATE)
 WHERE Id = '123'
4
Evgeny Sobolev

これは機能するはずです。予約語であるため、[日付]を角かっこで囲みます。

2
mikesl

時間の指定に興味がない場合は、 'DD/MM/YYYY'の形式を使用することもできますが、Conversionメソッドに固執し、関連するISO形式。デフォルト値の使用は実際に避けてください。

以下に例を示します。

SET startDate = CONVERT(datetime,'2015-03-11T23:59:59.000',126) WHERE custID = 'F24'

1
OriginalOcto

テーブルにそれを戻すトリガーがあるのでしょうか?

1
Gratzy