将DateTime数据库字段设置为“ Now”


93

在VB.net代码中,我创建带有SQL参数的请求。我将DateTime参数设置为值DateTime.Now,我的请求将是什么样?

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

要么

UPDATE table SET date = GETDATE();

在第一种情况下,我确定每个记录都将设置为完全相同的时间。在第二种情况下,它取决于DBMS如何处理请求。这使我想到第二个问题:使用NOW()更新大表时,SQL Server是否设置相同的日期和时间?

编辑:用GETDATE()替换了NOW()(在SQL Server中不存在)。

Answers:


172

在SQL中,您需要使用GETDATE()

UPDATE table SET date = GETDATE();

没有NOW()功能。


要回答您的问题:

在大表中,由于该函数是针对每一行进行评估的,因此最终将为更新的字段获得不同的值。

因此,如果您的要求是将所有日期都设置为同一日期,我将执行以下操作(未测试):

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

UPDATE table SET date = @currDate;

糟糕,现在是Mysql,抱歉。但是问题仍然存在。
Thibault Witzig '12

好,谢谢。因此,我需要确保将实际日期(来自代码)放入请求中,而不是GETDATE(),是否知道将SQLparameter设置为DateTime。现在将执行此操作,或者如果我应该首先将日期转换为字符串,然后将其添加到请求中?
Thibault Witzig 2010年

@@ Thibault Witzig-可以。或者,您也可以使用我发布的SQL(将当前日期放入变量中,并使用该变量在表格中设置日期-变量中的值不会更改)。
Oded 2010年

如果要为所有记录保留相同的时间,请使用Parameterized SQL将Now作为参数传递。这样,您就不必担心字符串解析或本地化数据字符串格式问题。
Jim Wooley 2013年

20

GETDATE()的替代方法是CURRENT_TIMESTAMP。做完全相同的事情。


7
CURRENT_TIMESTAMP是真正的SQL标准,因此有人可能会认为这是首选语法。
Tony L.

这是完全错误的。我只是阅读了关于这两个文档的文档,对我来说,显然它们并非“完全相同”。这个问题提供了一个更详细的解释是:stackoverflow.com/questions/7105093/...
姆拉登B.

7

使用GETDATE()

以不带数据库时区偏移的日期时间值返回当前数据库系统时间戳。此值是从运行SQL Server实例的计算机的操作系统派生的。

UPDATE table SET date = GETDATE()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.