我正在使用
Convert(varchar, Getdate(), 101)
仅将系统日期的日期部分插入到我的一个SQL Server数据库表中。 我的问题是:这是正确的方法还是有其他更好的方法来做到这一点?
答案 0 :(得分:4)
我不明白为什么要将GETDATE()
输出(已经DATETIME
)转换为VARCHAR
,然后SQL Server会将其转换回DATETIME
再插入它。
只需使用:
INSERT INTO dbo.YourTable(SomeDateTimeColumn)
VALUES(GETDATE())
如果您正在进行转换以摆脱DATETIME
的时间部分,那么您应该更好:
DATE
数据类型(在SQL Server 2008 和更新版本中提供)仅存储DATE
(没有时间)如果您使用的是SQL Server 2005 或更早版本,请改用此转换 - 应该比两次转换更有效!
INSERT INTO dbo.YourTable(SomeDateTimeColumn)
VALUES(DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0))
更新:进行了一些性能测试,在这种特殊情况下,似乎SQL Server需要做的工作量实际上是相同的 - 无论您是否使用转换为varchar剥离您已经拥有的时间和日期时间方法,或者您是否使用我的获取自日期0 以来的天数。似乎最终没有任何区别。
最佳解决方案仍然是:如果您只需要日期 - 请使用DATE
类型的列(在SQL Server 中) 2008 和更新版本)并完全保存对GETDATE()
输出的任何转换或操作。