Установите для поля базы данных DateTime значение «Сейчас»


99

В коде VB.net я создаю запросы с параметрами SQL. Я установил для параметра DateTime значение DateTime. Теперь, как будет выглядеть мой запрос?

UPDATE table SET date = "2010/12/20 10:25:00";

или

UPDATE table SET date = GETDATE();

В первом случае я уверен, что каждая запись будет установлена ​​на одно и то же время. Во втором случае это зависит от того, как СУБД обрабатывает запрос. Это подводит меня ко второму вопросу: устанавливает ли SQL Server одинаковую дату и время при обновлении большой таблицы с помощью NOW ()?

РЕДАКТИРОВАТЬ: заменено NOW () (которого нет в SQL Server) на GETDATE ().

Ответы:


179

В SQL вам нужно использовать GETDATE():

UPDATE table SET date = GETDATE();

Нет NOW()функции.


Чтобы ответить на ваш вопрос:

В большой таблице, поскольку функция оценивается для каждой строки, вы получите разные значения для обновленного поля.

Итак, если ваше требование - установить все на одну и ту же дату, я бы сделал что-то вроде этого (непроверено):

DECLARE @currDate DATETIME;
SET @currDate = GETDATE();

UPDATE table SET date = @currDate;

Ой, да СЕЙЧАС () - это Mysql, извините. Но остаются вопросы.
Тибо Витциг,

Хорошо, спасибо. Поэтому мне нужно обязательно указать фактическую дату (из кода) в моем запросе, а не GETDATE (). Знаете ли вы, что он устанавливает параметр SQL в DateTime. Теперь сделаю это, или если я должен сначала преобразовать дату в строку, а затем добавить в запрос?
Тибо Витциг,

@@ Thibault Witzig - Вы могли бы. Или вы можете использовать отправленный мною SQL (получить текущую дату в переменной и использовать переменную для установки даты в таблице - значение в переменной не изменится).
Oded

Если вы хотите сохранить одинаковое время для всех записей, передайте Now в качестве параметра, используя параметризованный SQL. Таким образом, вам не придется беспокоиться о проблемах синтаксического анализа строк или локализованного форматирования строк данных.
Джим Вули

20

Альтернативой GETDATE () является CURRENT_TIMESTAMP. Делает то же самое.


7
CURRENT_TIMESTAMPявляется стандартом SQL, поэтому некоторые могут поспорить, что это предпочтительный синтаксис.
Тони Л.

Это совершенно неверно. Я только что прочитал документацию по этим двум, и мне кажется очевидным, что это не «одно и то же». Этот вопрос предлагает более подробное объяснение этого: stackoverflow.com/questions/7105093/…
Младен Б.

7

Используйте GETDATE ()

Возвращает текущую системную временную метку базы данных как значение даты и времени без смещения часового пояса базы данных. Это значение получено из операционной системы компьютера, на котором запущен экземпляр SQL Server.

UPDATE table SET date = GETDATE()
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.