2010-06-29 7 views
58

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.

+1

è data il nome della colonna reale? – Gratzy

+1

non in realtà, è EndDate, ma l'ho appena abbreviato in Date. – Xaisoft

+0

ottieni un errore o semplicemente nessun risultato? – Gratzy

risposta

26

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 
+1

Questo ha funzionato, ma l'ho provato prima senza tutti gli zeri e non ha funzionato. Perché? – Xaisoft

+0

ho provato con '2009-05-25 00: 02: 01.000', ma non ha funzionato. – Xaisoft

+0

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. –

1

C'è forse un trigger sulla impostazione di nuovo tavolo?

+0

Controllerò su di esso. – Xaisoft

2

Che dovrebbe funzionare, metterei le parentesi attorno a [Data] perché si tratta di una parola chiave riservata.

+3

Il suo nome è in realtà DataFine – Xaisoft

9

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 ...

+0

Id 1 esiste. – Xaisoft

+0

Il formato della data è il motivo per cui stavo pensando di essere esplicita circa la conversione sarebbe una buona idea ... –

+0

Roba buona Remo, 'SET DATEFORMAT' è davvero efficace quando si scrive SQL per gli ambienti con diverse localizzazioni –

8

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

1

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'

4
UPDATE TABLE 
    SET EndDate = CAST('2017-12-31' AS DATE) 
WHERE Id = '123' 
Problemi correlati