TSQL:datediff不能与DEFAULT getdate()一起使用

伊利亚·加兹曼(Ilya Gazman)

我有一个date类型为column且默认设置为的表:getdate()但是,当我尝试datediff()对两个分开的原始数据进行处理,它总是给我0或某个常数。如何分配日期的默认值并执行datediff()该工作?

示例代码,重现我的问题

CREATE TABLE Test
(
    id INT PRIMARY KEY NOT NULL IDENTITY,
    date DATE DEFAULT getdate() NOT NULL,
    user VARCHAR(100)
);
CREATE UNIQUE INDEX Test_id_uindex ON Test (id);

两次或两次以上之间延迟1秒调用以下原始数据

  • INSERT INTO Test(user) VALUES ('Cool1')
  • INSERT INTO Test(user) VALUES ('Cool2')

现在,在下面查看下一个查询的奇怪输出:

  1. SELECT getdate() as date

输出:

date   
2016-12-22 10:42:40
  1. SELECT * from Test

输出:

id    date          user
1     2016-12-22    Cool    
2     2016-12-22    Cool1

最后一个:

SELECT
  a.id,
  datediff(MILLISECOND, a.date, b.date)
FROM Test a
  JOIN Test b ON a.id = b.id + 1

输出:

id    difTime
2     0
戈登·利诺夫(Gordon Linoff)

您的代码很好。您将date数据类型与datetime混淆datetime2更改表定义以使用存储时间和日期的类型:

CREATE TABLE Test (
    id INT PRIMARY KEY NOT NULL IDENTITY,
    date DATETIME DEFAULT getdate() NOT NULL,
    user VARCHAR(100)
);

这是很自然的地方,因为会GETDATE()返回带有时间成分的值。但是,DATE不支持时间部分。

您还可以使用CURRENT_TIMESTAMP,其名称更能说明它返回时间的事实。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章