如何使用SQL BETWEEN将要执行的字符串中的两个日期与sp_executesql进行比较



我的SQL存储过程中有一行看起来像这样(按预期工作):

HAVING  oh.startdate BETWEEN @startDate AND @endDate

然而,在更远的地方,我有一条线:

AND (oh.user IN (@userIDs))

其中@userID是一个逗号分隔的ID字符串,oh.user是一个INTEGER,所以我必须将整个SQL查询放入一个动态字符串(@SQL)中,并将所有参数连接到其中,然后使用

sp_executesql @sql 

除了BETWEEN日期外,一切都很好,我尝试了几种方法,在应该出现错误或没有结果的情况下不断出现错误:

    HAVING  oh.startdate BETWEEN CONVERT(DATETIME, '+LEFT(CONVERT(VARCHAR, @startDate, 120), 10)+', 120) AND CONVERT(DATETIME, '+LEFT(CONVERT(VARCHAR, @endDate, 120), 10)+', 120)

不返回任何内容。

    HAVING  oh.startdate '+LEFT(CONVERT(VARCHAR, @startDate, 120), 10)+' AND '+LEFT(CONVERT(VARCHAR, @endDate, 120), 10)+'

也不返回任何内容。

    HAVING  oh.startdate BETWEEN ' + @startDate +' AND '+ @endDate +'

返回将DATETIME转换为字符串时出错。

感谢您的帮助。

谢谢,Thomas

您可以使用sp_executesql并传递您想要的参数:

SET @sql = 'SELECT blabla FROM Table WHERE Something HAVING oh.startdate BETWEEN @startDate AND @endDate'
EXEC sp_executesql @sql,N'@startDate DATE, @EndDate DATE',@startDate, @EndDate

试试这个:

HAVING  oh.startdate BETWEEN to_date(@startDate,'dd-MM-yyyy') AND to_date(@endDate,'dd-MM-yyyy')

并更改"dd-MM-yyyy"以适应您使用的日期格式。

相关内容

  • 没有找到相关文章

最新更新