Наступний запит не оновлює поле дати та часу:
update table
SET EndDate = '2009-05-25'
WHERE Id = 1
Я також спробував без тире, але це теж не працює.
Наступний запит не оновлює поле дати та часу:
update table
SET EndDate = '2009-05-25'
WHERE Id = 1
Я також спробував без тире, але це теж не працює.
EndDate
стовпця?
Відповіді:
Якщо ви сумніваєтесь, будьте явними щодо перетворення типу даних за допомогою 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
Рядковий літерал встановлюється на пазу відповідно до поточного параметра формату дати, див SET DATEFORMAT
. Формат, який завжди працюватиме, - це формат "20090525".
Тепер, звичайно, вам потрібно визначити "не працює". Жодні записи не оновлюються? Можливо, Id=1
це не відповідає жодному запису ...
Якщо там написано "Один запис змінено", можливо, вам потрібно показати нам, як ви підтверджуєте ...
SET DATEFORMAT
дійсно ефективний при написанні SQL для середовищ з різною локалізацією
Використання параметра 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
UPDATE TABLE
SET EndDate = CAST('2017-12-31' AS DATE)
WHERE Id = '123'
Якщо ви не зацікавлені вказувати час, ви також можете використовувати формат ' DD / MM / YYYY ', однак я б дотримувався методу перетворення та відповідного формату ISO, оскільки вам справді слід уникати використання значень за замовчуванням.
Ось приклад:
SET startDate = CONVERT(datetime,'2015-03-11T23:59:59.000',126)
WHERE custID = 'F24'