Die folgende Abfrage aktualisiert das Datum / Uhrzeit-Feld nicht:
update table
SET EndDate = '2009-05-25'
WHERE Id = 1
Ich habe es auch ohne Bindestriche versucht, aber das funktioniert auch nicht.
Die folgende Abfrage aktualisiert das Datum / Uhrzeit-Feld nicht:
update table
SET EndDate = '2009-05-25'
WHERE Id = 1
Ich habe es auch ohne Bindestriche versucht, aber das funktioniert auch nicht.
EndDate
Spalte?
Antworten:
Geben Sie im Zweifelsfall die Datentypkonvertierung mit CAST / CONVERT explizit an :
UPDATE TABLE
SET EndDate = CAST('2009-05-25' AS DATETIME)
WHERE Id = 1
Normalerweise sollte es funktionieren.
Aber kannst du das versuchen? Ich habe kein SQL auf meinem Heim-PC, ich kann es nicht selbst versuchen
UPDATE table
SET EndDate = '2009-05-25 00:00:00.000'
WHERE Id = 1
Das Zeichenfolgenliteral wird gemäß der aktuellen Datumsformateinstellung verschoben, siehe SET DATEFORMAT
. Ein Format, das immer funktioniert, ist das '20090525'.
Jetzt müssen Sie natürlich definieren, dass "nicht funktioniert". Keine Datensätze werden aktualisiert? Vielleicht Id=1
passt das zu keinem Rekord ...
Wenn dort "Ein Datensatz geändert" steht, müssen Sie uns möglicherweise zeigen, wie Sie ...
SET DATEFORMAT
ist wirklich effektiv beim Schreiben von SQL für Umgebungen mit unterschiedlichen Lokalisierungen
Die Verwendung eines DateTime-Parameters ist der beste Weg. Wenn Sie jedoch weiterhin eine DateTime als Zeichenfolge übergeben möchten, sollte CAST nicht erforderlich sein, sofern ein sprachunabhängiges Format verwendet wird.
z.B
Gegeben eine Tabelle erstellt wie:
create table t1 (id int, EndDate DATETIME)
insert t1 (id, EndDate) values (1, GETDATE())
Folgendes sollte immer funktionieren:
update t1 set EndDate = '20100525' where id = 1 -- YYYYMMDD is language agnostic
Folgendes wird funktionieren:
SET LANGUAGE us_english
update t1 set EndDate = '2010-05-25' where id = 1
Dies wird jedoch nicht:
SET LANGUAGE british
update t1 set EndDate = '2010-05-25' where id = 1
Dies liegt daran, dass 'JJJJ-MM-TT' kein sprachunabhängiges Format ist (aus Sicht des SQL Servers).
Das ISO-Format 'JJJJ-MM-TTThh: mm: ss' ist ebenfalls sprachunabhängig und nützlich, wenn Sie eine Zeit ungleich Null überschreiten müssen.
Weitere Informationen: http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes
UPDATE TABLE
SET EndDate = CAST('2017-12-31' AS DATE)
WHERE Id = '123'
Wenn Sie keine Zeit angeben möchten , können Sie auch das Format ' TT / MM / JJJJ ' verwenden. Ich würde mich jedoch an eine Konvertierungsmethode und das entsprechende ISO-Format halten, da Sie die Verwendung von Standardwerten wirklich vermeiden sollten.
Hier ist ein Beispiel:
SET startDate = CONVERT(datetime,'2015-03-11T23:59:59.000',126)
WHERE custID = 'F24'