Ustaw pole bazy danych DateTime na „Now”

98

W kodzie VB.net tworzę żądania z parametrami SQL. Ustawiam parametr DateTime na wartość DateTime.Now, jak będzie wyglądać moje żądanie?

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

lub

UPDATE table SET date = GETDATE();

W pierwszym przypadku jestem pewien, że każdy rekord będzie ustawiony na dokładnie ten sam czas. W drugim przypadku zależy to od tego, jak DBMS przetwarza żądanie. Co prowadzi mnie do drugiego pytania: czy SQL Server ustawia tę samą datę i godzinę podczas aktualizowania dużej tabeli za pomocą NOW ()?

EDYCJA: zastąpiono TERAZ () (który nie istnieje w SQL Server) przez GETDATE ().

Thibault Witzig
źródło

Odpowiedzi:

178

W SQL musisz użyć GETDATE():

UPDATE table SET date = GETDATE();

Nie ma żadnej NOW()funkcji.


Odpowiedzieć na Twoje pytanie:

W dużej tabeli, ponieważ funkcja jest oceniana dla każdego wiersza, otrzymasz różne wartości zaktualizowanego pola.

Tak więc, jeśli Twoim wymaganiem jest ustawienie tego wszystkiego na tę samą datę, zrobiłbym coś takiego (niesprawdzone):

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

UPDATE table SET date = @currDate;
Oded
źródło
Ups tak TERAZ () to MySQL, przepraszam. Ale pytania pozostają.
Thibault Witzig,
Ok dzięki. Muszę więc upewnić się, że w moim żądaniu umieściłem rzeczywistą datę (z kodu), a nie GETDATE () Czy wiesz, że ustawienie parametru SQL na DateTime.Now zrobi to lub Jeśli najpierw powinienem przekonwertować datę na ciąg, a następnie dodać to do wniosku?
Thibault Witzig
@@ Thibault Witzig - Możesz. Możesz też użyć napisanego przeze mnie SQL (pobierz aktualną datę do zmiennej i użyj zmiennej do ustawienia daty w tabeli - wartość w zmiennej nie ulegnie zmianie).
Oded
Jeśli chcesz zachować ten sam czas dla wszystkich rekordów, przekaż Now jako parametr za pomocą sparametryzowanego SQL. W ten sposób nie musisz martwić się analizowaniem ciągów lub zlokalizowanymi problemami z formatowaniem ciągu danych.
Jim Wooley,
20

Alternatywą dla GETDATE () jest CURRENT_TIMESTAMP. Robi dokładnie to samo.

Don Simon
źródło
7
CURRENT_TIMESTAMPjest w rzeczywistości standardem SQL, więc niektórzy mogą twierdzić, że jest to preferowana składnia.
Tony L.
To jest całkiem błędne. Właśnie przeczytałem dokumenty dotyczące tych dwóch i wydaje mi się oczywiste, że nie są to „dokładnie to samo”. To pytanie zawiera bardziej szczegółowe wyjaśnienie: stackoverflow.com/questions/7105093/…
Mladen B.
7

Posługiwać się GETDATE ()

Zwraca bieżącą sygnaturę czasową systemu bazy danych jako wartość data i godzina bez przesunięcia strefy czasowej bazy danych. Ta wartość pochodzi z systemu operacyjnego komputera, na którym jest uruchomione wystąpienie programu SQL Server.

UPDATE table SET date = GETDATE()
Adriaan Stander
źródło