我找到了一个包含date
类型列的表,默认设置为: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')
现在查看下面查询的奇怪输出:
SELECT getdate() as date
输出:
date
2016-12-22 10:42:40
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
答案 0 :(得分:5)
你的代码很好。您将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
,其名称更能唤起它返回时间的事实。