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.
sql
sql-server
tsql
types
Xaisoft
źródło
źródło
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
źródło
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
źródło
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że
Id=1
nie pasuje do żadnego rekordu ...Jeśli wyświetla się komunikat „Zmieniono jeden rekord”, być może musisz nam pokazać, jak weryfikujesz ...
źródło
SET DATEFORMAT
jest naprawdę skuteczny podczas pisania SQL dla środowisk z różnymi lokalizacjamiNajlepszym 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
źródło
UPDATE TABLE SET EndDate = CAST('2017-12-31' AS DATE) WHERE Id = '123'
źródło
To powinno zadziałać, umieściłbym nawiasy wokół [Date], ponieważ jest to zastrzeżone słowo kluczowe.
źródło
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'
źródło
Czy może na stole jest wyzwalacz, który go cofa?
źródło