Defina um campo de banco de dados DateTime como “Agora”

93

No código VB.net, eu crio solicitações com parâmetros SQL. Se eu definir um parâmetro DateTime para o valor DateTime.Agora, como será a minha solicitação?

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

ou

UPDATE table SET date = GETDATE();

No primeiro caso, tenho certeza de que todos os registros serão configurados exatamente no mesmo tempo. No segundo caso, depende de como o DBMS processa a solicitação. O que me leva à segunda pergunta: o SQL Server define a mesma data e hora ao atualizar uma tabela grande com NOW ()?

EDIT: substituído NOW () (que não existe no SQL Server) por GETDATE ().

Thibault Witzig
fonte

Respostas:

172

No SQL, você precisa usar GETDATE():

UPDATE table SET date = GETDATE();

Não há NOW()função.


Para responder à sua pergunta:

Em uma tabela grande, como a função é avaliada para cada linha, você acabará obtendo valores diferentes para o campo atualizado.

Portanto, se o seu requisito é definir tudo com a mesma data, eu faria algo assim (não testado):

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

UPDATE table SET date = @currDate;
Oded
fonte
Opa sim AGORA () é Mysql, desculpe. Mas as questões permanecem.
Thibault Witzig
Ok, obrigado. Portanto, preciso ter certeza de colocar a data real (do código) em minha solicitação em não GETDATE () Você sabe que definindo o parâmetro SQL para DateTime.Agora farei isso ou se eu deveria primeiro converter a data para uma string e depois adicionar ao pedido?
Thibault Witzig
@@ Thibault Witzig - Você poderia. Ou você pode usar o SQL que postei (coloque a data atual em uma variável e use a variável para definir a data na tabela - o valor na variável não mudará).
Oded de
Se você deseja manter o mesmo tempo para todos os registros, passe Agora como um parâmetro usando SQL parametrizado. Dessa forma, você não precisa se preocupar com a análise de strings ou com problemas de formatação de strings de dados localizados.
Jim Wooley
20

Uma alternativa para GETDATE () é CURRENT_TIMESTAMP. Faz exatamente a mesma coisa.

Don Simon
fonte
7
CURRENT_TIMESTAMPé realmente o padrão SQL, então alguns podem argumentar que esta é a sintaxe preferida.
Tony L.
Isso está totalmente errado. Acabei de ler os documentos sobre os dois e parece óbvio para mim que eles não são "exatamente a mesma coisa". Esta pergunta oferece uma explicação mais detalhada para isso: stackoverflow.com/questions/7105093/…
Mladen B.
7

Use GETDATE ()

Retorna o registro de data e hora do sistema de banco de dados atual como um valor de data e hora sem o deslocamento de fuso horário do banco de dados. Esse valor é derivado do sistema operacional do computador no qual a instância do SQL Server está sendo executada.

UPDATE table SET date = GETDATE()
Adriaan Stander
fonte