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.
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.
EndDate
kolumnie?
Odpowiedzi:
W razie wątpliwości należy wyraźnie określić konwersję typu danych za pomocą funkcji RZUTUJ / KONWERTUJ :
UPDATE TABLE
SET EndDate = CAST('2009-05-25' AS DATETIME)
WHERE Id = 1
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
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 ...
SET DATEFORMAT
jest naprawdę skuteczny podczas pisania SQL dla środowisk z różnymi lokalizacjami
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
UPDATE TABLE
SET EndDate = CAST('2017-12-31' AS DATE)
WHERE Id = '123'
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'