将系统日期的datepart只插入SQL Server的最佳方法是什么

时间:2013-03-17 09:49:52

标签: sql-server datetime

我正在使用

Convert(varchar, Getdate(), 101)

仅将系统日期的日期部分插入到我的一个SQL Server数据库表中。 我的问题是:这是正确的方法还是有其他更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:4)

我不明白为什么要将GETDATE()输出(已经DATETIME)转换为VARCHAR,然后SQL Server会将其转换回DATETIME再插入它。

只需使用:

INSERT INTO dbo.YourTable(SomeDateTimeColumn) 
VALUES(GETDATE())

如果您正在进行转换以摆脱DATETIME的时间部分,那么您应该更好:

  1. 使用DATE数据类型(在SQL Server 2008 和更新版本中提供)仅存储DATE(没有时间)
  2. 如果您使用的是SQL Server 2005 或更早版本,请改用此转换 - 应该比两次转换更有效!

    INSERT INTO dbo.YourTable(SomeDateTimeColumn) 
    VALUES(DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0))
    
  3. 更新:进行了一些性能测试,在这种特殊情况下,似乎SQL Server需要做的工作量实际上是相同的 - 无论您是否使用转换为varchar剥离您已经拥有的时间和日期时间方法,或者您是否使用我的获取自日期0 以来的天数。似乎最终没有任何区别。

    最佳解决方案仍然是:如果您只需要日期 - 请使用DATE类型的列(在SQL Server 中) 2008 和更新版本)并完全保存对GETDATE()输出的任何转换或操作。