字符串的转换日期和/或时间

时间:2012-08-08 15:36:17

标签: sql sql-server-2008 tsql dynamic-sql

我有一个很大的过程,主要包括动态SQL。我在设置其中一个日期字段时遇到问题。

DECLARE @WorkDate DATETIME 

SET @WorkDate = 'SELECT MIN(__Insert_Date) FROM  ' + @DatabaseName + '.'
                            + @SchemaName + '.' + @TableName + '_Hist'

SET @WorkDate = DATEADD(DAY, DATEDIFF(DAY, '19000101', @WorkDate), '19000101')

这是一个重要程序的一部分。因此,当我执行上述查询时,我收到此错误:

  

Msg 241,Level 16,State 1,Line 68
  从字符串转换日期和/或时间时转换失败。

3 个答案:

答案 0 :(得分:0)

看起来此数据库中的日期字段未存储为DateTime值。

答案 1 :(得分:0)

而不是19000101,请使用1900-01-01。它无法识别您的字符串的日期格式,或者您的@WorkDate值无效。

答案 2 :(得分:0)

@WorkDate是DATETIME,你把它设置为sting,这就是转换失败的原因 编辑:

试试这个:

DECLARE @WorkDate DATETIME, @WorkDateString varchar(100)

SET @WorkDateString = 'SELECT MIN(__Insert_Date) FROM  ' + @DatabaseName + '.'
                        + @SchemaName + '.' + @TableName + '_Hist'

SET @WorkDate = DATEADD(DAY, DATEDIFF(DAY, '19000101', @WorkDate), '19000101')

如果您需要将@WorkDate插入__Insert_Date所在的选择字符串中,那么您需要将订单反转为看起来像这样

DECLARE @WorkDate DATETIME, @WorkDateString varchar(100)

SET @WorkDate = DATEADD(DAY, DATEDIFF(DAY, '19000101', @WorkDate), '19000101')

SET @WorkDateString = 'SELECT MIN(' + CAST(@WorkDate as varchar(19)) + ') FROM  ' + @DatabaseName + '.'
                        + @SchemaName + '.' + @TableName + '_Hist'

不知道您是否希望将@WorkDate插入到选择字符串中,但这就是您可以实现的目标