T-SQL从DateTime中删除时间

时间:2013-02-08 21:36:44

标签: sql tsql sql-server-2005-express

SQL Server 2005 Express中这两行之间有什么区别?

DATEADD(d, 0, DATEDIFF(d, 0, @Today));

DATEADD(d, DATEDIFF(d, 0, @Today), 0);

除了使该陈述在随机时间失败之外:

DECLARE @DateSrc DATETIME;

-- Chop off the time part:
SET @DateSrc = DATEADD(d, 0, DATEDIFF(d, 0, @Today));

INSERT INTO dbo.SeqNo(MyGUID, TheDay, LastNo)
SELECT @MyGUID, @DateSrc, 0
WHERE NOT EXISTS ( 
  SELECT 1 FROM dbo.SeqNo AS sn
  WHERE sn.MyGUID = @MyGUID AND sn.TheDay = @DateSrc 
  );

3 个答案:

答案 0 :(得分:0)

它们都会产生相同的结果,但第二种是更好的格式,因为它适用于其他间隔(小时,月,年等)而第一种不会。

答案 1 :(得分:0)

语法为:DATEADD(datepart,number,date)

第1行:     DATEADD(d,0,DATEDIFF(d,0,@ Today));

第2行:     DATEADD(d,DATEDIFF(d,0,@ Today),0);

所以答案是数字解析为int(第2行),date解析为datetime(第1行) - 这就是差异。

答案 2 :(得分:0)

问题是并发问题。

存储过程的更改现在已经生产了几天而没有问题;一个有趣的解决方案。显然两个版本都有效。

但是,我只是再次检查了代码,它检查了应用程序的单个实例,并在此存储过程调用之后移动到了该代码。 Arhhgg!并发问题。

对不起,请再次感谢您的帮助。

PS。只有一件有趣的事情......为什么我不能按照上面的评论重现SQL Server Management Studio中的并发问题?与新的DateAdd格式完美交错。