1

我目前正在使用

Convert(varchar, Getdate(), 101)

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

4

1 回答 1

4

我不明白您为什么要将GETDATE()输出(DATETIME已经是)转换为 a 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))
    

更新:做了一些性能测试,在这种特殊情况下,似乎 SQL Server 需要做的工作量实际上是相同的 - 无论您是否使用convert to varchar 剥离时间并返回 datetime方法你已经有了,或者你是否正在使用我的get the number of days since date 0方法。最后好像没什么区别。

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

于 2013-03-17T10:36:47.603 回答