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()
,因为这个存储过程将每个月运行一次,并为该月创建数据库
非常感谢你
答案 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)'