Следующий запрос не обновляет поле datetime:
update table
SET EndDate = '2009-05-25'
WHERE Id = 1
Я также пробовал его без тире, но это тоже не работает.
Следующий запрос не обновляет поле datetime:
update table
SET EndDate = '2009-05-25'
WHERE Id = 1
Я также пробовал его без тире, но это тоже не работает.
Если у вас есть сомнения, быть явным в отношении преобразования типа данных с использованием 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 в виде строки, то 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 'YYYY-MM-DDThh: mm: ss' также не зависит от языка и полезен, когда вам нужно передать ненулевое время.
Больше информации: http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes
UPDATE TABLE
SET EndDate = CAST('2017-12-31' AS DATE)
WHERE Id = '123'
Это должно сработать, я бы поставил скобки вокруг [Date] в качестве зарезервированного ключевого слова.
Возможно, есть триггер в таблице, который он возвращает?
Если вам не интересно указывать время, вы также можете использовать формат " DD/MM/YYYY", однако я бы придерживался метода Конверсия, и соответствующий формат ISO, поскольку вам действительно следует избегать использования значений по умолчанию.
Вот пример:
SET startDate = CONVERT(datetime,'2015-03-11T23:59:59.000',126)
WHERE custID = 'F24'
ОБНОВЛЕНИЕ ТАБЛИЦЫ SET EndDate = CAST ('2009-05-25' КАК DATETIME) ГДЕ Id = 1
Это не работает в SQL Server.