Встановіть для поля бази даних DateTime значення «Зараз»


94

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

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

або

UPDATE table SET date = GETDATE();

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

EDIT: замінено NOW () (який не існує в SQL Server) на GETDATE ().

Відповіді:


173

У SQL вам потрібно використовувати GETDATE():

UPDATE table SET date = GETDATE();

NOW()Функції немає .


Щоб відповісти на ваше запитання:

У великій таблиці, оскільки функція обчислюється для кожного рядка, ви отримаєте різні значення для оновленого поля.

Отже, якщо Вашою вимогою є встановити все на ту саму дату, я б зробив щось подібне (неперевірене):

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

UPDATE table SET date = @currDate;

На жаль, ТЕПЕР () - це Mysql, вибачте. Але питання залишаються.
Тібо Вітціг

Добре, дякую. Тому мені потрібно бути впевненим, що в моєму запиті вказано фактичну дату (з коду), а не GETDATE () Чи знаєте ви, що він встановлює параметр SQL на DateTime. Зараз це зробить, або якщо мені слід спочатку перетворити дату в рядок, а потім додати його до запиту?
Тібо Вітціг

@@ Тібо Вітціг - Ти міг би. Або ви можете використати опублікований мною SQL (отримайте поточну дату у змінну та використовуйте змінну для встановлення дати в таблиці - значення в змінній не зміниться).
Оді

Якщо ви хочете зберегти однаковий час для всіх записів, передайте Now як параметр, використовуючи Parameterized 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.