Как обновить поле DateTime в T-SQL?



следующий запрос не обновляет поле datetime:



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


Я также попробовал его без тире, но это тоже не работает.

583   8  

8 ответов:

когда сомневаешься,быть явным о преобразовании типа данных с помощью CAST / CONVERT:

UPDATE TABLE
   SET EndDate = CAST('2009-05-25' AS DATETIME)
 WHERE Id = 1

Как правило, это должно работать.

но вы можете попробовать это? У меня нет SQL на моем домашнем компьютере, я не могу попробовать себя

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

строковый литерал выгружается в соответствии с текущим параметром dateformat, см. SET DATEFORMAT. Один формат, который всегда будет работать,- это "20090525".

теперь, конечно, вам нужно определить "не работает". Никаких записей не обновляется? Возможно, что Id=1 не соответствует ни одна запись...

если он говорит "одна запись изменена", то, возможно, вам нужно показать нам, как вы проверяете...

использование параметра DateTime является лучшим способом. Однако если вы все еще хотите передать DateTime в виде строки, то приведение не должно быть необходимым при условии, что используется языковой агностический формат.

например

учитывая таблицу, созданную как:

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

всегда должно работать следующее:

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

следующие работы :

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

однако, это не будет:

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

это потому, что 'гггг-ММ-ДД' не языковой агностический формат (с точки зрения SQL server) .

формат ISO 'YYYY-MM-DDThh:mm: ss' также является языковым агностиком и полезен, когда вам нужно пройти ненулевое время.

дополнительная информация:http://www.karaszi.com/SQLServer/info_datetime.asp

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

Это должно работать, я бы поставил скобки вокруг [дата], поскольку это зарезервированное ключевое слово.

может быть, есть триггер на столе, устанавливающий его обратно?

Если вы не заинтересованы в указании времени, вы можете также использовать формат 'ДД/ММ/ГГГГ', однако я бы придерживался преобразование метод и его соответствующий формат ISO, так как вы действительно должны избегать использования значений по умолчанию.

вот пример:

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

Comments

    Ничего не найдено.