sql - 从字符串转换日期时转换失败

时间:2012-04-05 07:50:49

标签: sql sql-server tsql

Hy,

我遇到了问题,我无法理解......

    declare @start_date datetime, @date_1m datetime, @date_1m_end datetime

    set @start_date = GETDATE()
    set @date_1m = DATEADD(MONTH,-1,DATEADD(MONTH, DATEDIFF(MONTH, 0, @start_date),0))
    set @date_1m_end = DATEADD(SS, -1, DATEADD(MONTH, 1, @date_1m))

    set @sql_exec = 'insert into #temp select ... where a.date between ' + @date_1m + ' and ' + @date_1m_end + ''
exec(@sql_exec)

它给了我以下错误:

Conversion failed when converting date and/or time from character string.

为什么以及如何解决这个问题,因为它令人沮丧......

PS:我需要运行exec(),因为这个存储过程将每个月运行一次,并为该月创建数据库

非常感谢你

1 个答案:

答案 0 :(得分:1)

TSql正在尝试将您的所有文本转换为日期时间。您需要在分析之前将日期转换为字符串,并将它们转换回查询中的日期。

set @sql_exec = 'insert into #temp select ... where a.date between ' 
    + 'convert(datetime, ''' 
    + convert(varchar(10), @date_1m, 104) 
    + ''', 104)'
    + ' and '
    + 'convert(datetime, ''' 
    + convert (varchar(10), @date_1m_end, 104) 
    + ''', 104)'