Jak zaktualizować pole DateTime w T-SQL?


81

Następujące zapytanie nie aktualizuje pola daty i godziny:

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

Próbowałem też bez myślników, ale to też nie działa.


1
czy data to rzeczywista nazwa kolumny?
Gratzy

1
nie właściwie, to EndDate, ale właśnie skróciłem go do Date.
Xaisoft

pojawia się błąd lub po prostu brak wyników?
Gratzy

Jaki jest typ danych w EndDatekolumnie?
Kucyki OMG

Mówi, że dotyczy to 1 wiersza, ale kiedy sprawdzam, data się nie zmieniła.
Xaisoft

Odpowiedzi:



33

Zwykle powinno działać.

Ale czy możesz tego spróbować? Nie mam SQL na moim domowym komputerze, nie mogę sam spróbować

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

1
To zadziałało, ale próbowałem go wcześniej bez zer i nie zadziałało. Czemu?
Xaisoft

Wypróbowałem to z „2009-05-25 00: 02: 01.000”, ale nie zadziałało.
Xaisoft

Fajnie, poważnie nie mam pojęcia. Ponieważ pisałeś bez informacji o czasie, a SQL musi automatycznie dołączyć domyślny 00: 00: 00.000. Więc to musi działać.
Serkan Hekimoglu

11

Literał łańcuchowy jest przekazywany zgodnie z bieżącym ustawieniem formatu daty, patrz SET DATEFORMAT. Format, który zawsze będzie działał, to „20090525”.

Teraz oczywiście musisz zdefiniować „nie działa”. Żadne rekordy nie są aktualizowane? Być możeId=1 nie pasuje do żadnego rekordu ...

Jeśli wyświetla się komunikat „Zmieniono jeden rekord”, być może musisz nam pokazać, jak weryfikujesz ...


Format daty jest powodem, dla którego myślałem, że wyraźne określenie konwersji byłoby dobrym pomysłem ...
OMG Kucyki

Dobra rzecz Remus, SET DATEFORMATjest naprawdę skuteczny podczas pisania SQL dla środowisk z różnymi lokalizacjami
Matt R

Niesamowite! To zadziałało dla mnie i zaoszczędziło mi kilku kroków, ponieważ pole, które konwertuję, już używało tego formatu, tj. Nie trzeba najpierw konwertować go na format ISO lub inny.
Roberto

8

Najlepszym sposobem jest użycie parametru DateTime. Jeśli jednak nadal chcesz przekazać DateTime jako ciąg, funkcja CAST nie powinna być konieczna, pod warunkiem, że używany jest format niezależny od języka.

na przykład

Biorąc pod uwagę tabelę utworzoną w następujący sposób:

create table t1 (id int, EndDate DATETIME)
insert t1 (id, EndDate) values (1, GETDATE())

Poniższe powinny zawsze działać:

update t1 set EndDate = '20100525' where id = 1 -- YYYYMMDD is language agnostic

Będzie działać:

SET LANGUAGE us_english
update t1 set EndDate = '2010-05-25' where id = 1

Jednak to nie będzie:

SET LANGUAGE british
update t1 set EndDate = '2010-05-25' where id = 1  

Dzieje się tak, ponieważ „RRRR-MM-DD” nie jest formatem niezależnym od języka (z punktu widzenia serwera SQL).

Format ISO „RRRR-MM-DDTgg: mm: ss” jest również niezależny od języka i jest przydatny, gdy trzeba przejść przez czas niezerowy.

Więcej informacji: http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes



2

To powinno zadziałać, umieściłbym nawiasy wokół [Date], ponieważ jest to zastrzeżone słowo kluczowe.


2

Jeśli nie jesteś zainteresowany określaniem czasu, możesz również użyć formatu „ DD / MM / RRRR ”, jednak trzymałbym się metody konwersji i jej odpowiedniego formatu ISO, ponieważ naprawdę powinieneś unikać używania wartości domyślnych.

Oto przykład:

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


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.