La seguente query non aggiorna il campo datetime:Come si aggiorna un campo DateTime in T-SQL?
update table
SET EndDate = '2009-05-25'
WHERE Id = 1
Ho anche provato senza trattini, ma che non funziona neanche.
La seguente query non aggiorna il campo datetime:Come si aggiorna un campo DateTime in T-SQL?
update table
SET EndDate = '2009-05-25'
WHERE Id = 1
Ho anche provato senza trattini, ma che non funziona neanche.
In caso di dubbio, be explicit about the data type conversion using CAST/CONVERT:
UPDATE TABLE
SET EndDate = CAST('2009-05-25' AS DATETIME)
WHERE Id = 1
Normalmente, dovrebbe funzionare.
Ma puoi provare questo? Non ho SQL sul mio PC di casa, non posso provare io stesso
UPDATE table
SET EndDate = '2009-05-25 00:00:00.000'
WHERE Id = 1
Questo ha funzionato, ma l'ho provato prima senza tutti gli zeri e non ha funzionato. Perché? – Xaisoft
ho provato con '2009-05-25 00: 02: 01.000', ma non ha funzionato. – Xaisoft
Bello, davvero non ne ho idea. Perché hai scritto, senza informazioni in tempo, e SQL necessario collegare predefinita 00: 00: 00.000 automaticly. Quindi deve essere lavorato. –
Che dovrebbe funzionare, metterei le parentesi attorno a [Data] perché si tratta di una parola chiave riservata.
Il suo nome è in realtà DataFine – Xaisoft
La stringa letterale viene eseguita in base all'impostazione del formato data corrente, vedere SET DATEFORMAT
. Un formato che funzionerà sempre è "20090525".
Ora, ovviamente, è necessario definire "non funziona". Nessun record viene aggiornato? Forse il Id=1
non corrisponde ad alcun record ...
Se dice 'Un record cambiato', allora forse avete bisogno di mostrarci come di verificare ...
Id 1 esiste. – Xaisoft
Il formato della data è il motivo per cui stavo pensando di essere esplicita circa la conversione sarebbe una buona idea ... –
Roba buona Remo, 'SET DATEFORMAT' è davvero efficace quando si scrive SQL per gli ambienti con diverse localizzazioni –
L'utilizzo di un parametro DateTime è il modo migliore. Tuttavia, se si desidera comunque passare un DateTime come stringa, il CAST non dovrebbe essere necessario a condizione che venga utilizzato un formato agnostico della lingua.
ad es.
dato un tavolo creato come:
create table t1 (id int, EndDate DATETIME)
insert t1 (id, EndDate) values (1, GETDATE())
Il seguente dovrebbe sempre lavorare:
update t1 set EndDate = '20100525' where id = 1 -- YYYYMMDD is language agnostic
Di seguito funzionerà:
SET LANGUAGE us_english
update t1 set EndDate = '2010-05-25' where id = 1
Tuttavia, questo non lo farà:
SET LANGUAGE british
update t1 set EndDate = '2010-05-25' where id = 1
Questo perché "YYYY-MM-DD" non è un formato indipendente dalla lingua (dal punto di vista del server SQL).
Il formato ISO 'YYYY-MM-DDThh: mm: ss' è anche indipendente dalla lingua e utile quando è necessario passare un tempo diverso da zero.
Maggiori informazioni: http://www.karaszi.com/SQLServer/info_datetime.asp
Se non siete interessati a specificare un tempo, è anche possibile utilizzare il formato 'GG/MM/AAAA', tuttavia vorrei attenersi a un metodo diconversione, e il relativo formato ISO pertinente, in quanto dovresti davvero evitare di utilizzare valori predefiniti.
Ecco un esempio:
SET startDate = CONVERT(datetime,'2015-03-11T23:59:59.000',126) WHERE custID = 'F24'
UPDATE TABLE
SET EndDate = CAST('2017-12-31' AS DATE)
WHERE Id = '123'
è data il nome della colonna reale? – Gratzy
non in realtà, è EndDate, ma l'ho appena abbreviato in Date. – Xaisoft
ottieni un errore o semplicemente nessun risultato? – Gratzy