T-SQLのDateTimeフィールドをどのように更新しますか?


81

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

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

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


1
日付は実際の列名ですか?
Gratzy 2010年

1
実際にはEndDateですが、Dateに短縮しました。
xaisoft 2010年

エラーが発生しますか、それとも結果が表示されませんか?
Gratzy 2010年

EndDate列のデータ型は何ですか?
OMGポニー

1行が影響を受けたと表示されますが、確認したところ、日付は変更されていません。
xaisoft 2010年

回答:



33

通常は動作するはずです。

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

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

1
これは機能しましたが、以前にすべてゼロなしで試したところ、機能しませんでした。どうして?
xaisoft 2010年

'2009-05-25 00:02:01.000'で試してみましたが、うまくいきませんでした。
xaisoft 2010年

ニース、真剣に考えがありません。時間情報なしで記述したため、SQLはデフォルトの00:00:00.000を自動的にアタッチする必要があります。だからそれは機能しなければなりません。
Serkan Hekimoglu 2010年

11

文字列リテラルは、現在の日付形式の設定に従って貼り付けられます。を参照してください。 SET DATEFORMAT。を。常に機能するフォーマットの1つは、「20090525」フォーマットです。

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

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


日付形式は、変換について明示するのが良い考えだと私が考えていた理由です...
OMG Ponies 2010年

良いものRemusは、SET DATEFORMATローカリゼーションが異なる環境でSQLを作成するときに非常に効果的です
Matt R

驚くばかり!これは私にとってはうまくいき、変換しているフィールドはすでにこの形式を使用していたため、いくつかの手順を節約できました。つまり、最初にISOまたは他の形式に変換する必要はありません。
ロベルト

8

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



2

[Date]は予約済みのキーワードなので、角かっこで囲んでください。


2

時間を指定することに興味がない場合は、「DD / MM / YYYY」の形式を使用することもできますが、変換に固執しますデフォルト値の使用を実際に避ける必要があるため方法とそれに関連するISO形式を使用します。

次に例を示します。

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


1

テーブルにトリガーが設定されている可能性がありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.