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.
sql
sql-server
tsql
types
Xaisoft
quelle
quelle
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
quelle
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
quelle
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 ...
quelle
SET DATEFORMAT
ist wirklich effektiv beim Schreiben von SQL für Umgebungen mit unterschiedlichen LokalisierungenDie 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
quelle
UPDATE TABLE SET EndDate = CAST('2017-12-31' AS DATE) WHERE Id = '123'
quelle
Das sollte funktionieren, ich würde [Datum] in Klammern setzen, da es sich um ein reserviertes Schlüsselwort handelt.
quelle
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'
quelle
Gibt es vielleicht einen Auslöser auf dem Tisch, der ihn zurücksetzt?
quelle