Как Вы обновляете поле DateTime в T-SQL?

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

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

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

74
задан OMG Ponies 29 June 2010 в 20:03
поделиться

6 ответов

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

UPDATE TABLE
   SET EndDate = CAST('2009-05-25' AS DATETIME)
 WHERE Id = 1
141
ответ дан 24 November 2019 в 11:51
поделиться

В норме должно работать.

Но можно ли это попробовать? У меня нет SQL на моем домашнем ПК, я не могу попробовать себя

UPDATE table
SET EndDate = '2009-05-25 00:00:00.000'
WHERE Id = 1
32
ответ дан 24 November 2019 в 11:51
поделиться

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

2
ответ дан 24 November 2019 в 11:51
поделиться

Строковый литерал размещается в соответствии с текущими настройками формата даты, см. SET DATEFORMAT . Всегда будет работать формат «20090525».

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

Если там написано «Одна запись изменена», то, возможно, вам нужно показать нам, как вы проверяете ...

9
ответ дан 24 November 2019 в 11:51
поделиться

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

например.

Для таблицы, созданной следующим образом:

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-сервера).

Формат ISO «ГГГГ-ММ-ДДТчч: мм: сс» также не зависит от языка и полезен, когда вам нужно передать ненулевое время.

Дополнительная информация: http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes

8
ответ дан 24 November 2019 в 11:51
поделиться

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

1
ответ дан 24 November 2019 в 11:51
поделиться