我有一个带有两个日期时间变量(开始日期和结束日期)的查询,并附加两个不同的固定时间以允许业务交易时间偏移。
使用此逻辑的测试查询示例如下:
DECLARE @startdate datetime;
DECLARE @enddate datetime;
SET @startdate = convert(datetime,'2017-01-01')
SET @enddate = convert(datetime,'2017-01-02')
SELECT *
FROM ig_Business..Check_Item_Detail CID (NOLOCK)
JOIN ig_business..Check_Sales_Detail CSD (NOLOCK) ON CSD.transaction_data_id = CID.transaction_data_id
WHERE csd.tendered_date_time BETWEEN DATEADD(m, DATEDIFF(m, 0, convert(date, @STARTDATE)), 0) + '06:00:00'
AND DATEADD(m, DATEDIFF(m, 0, convert(date, @ENDDATE)), 0) + '05:59:59'
但是,此查询的结果集为空,我不确定原因,因为当我运行
时select DATEADD(m, DATEDIFF(m, 0, convert(date, @STARTDATE)), 0) + '06:00:00'
我找回了一个看似有效的日期时间:2017-01-01 06:00:00.000
答案 0 :(得分:3)
我找回了一个看似有效的日期时间:2017-01-01 06:00:00.000
你不是。
您回复了自动转换为字符串的日期,并在末尾粘贴了另一个字符串,为您提供看起来像日期时间的字符串。
如果要在日期中添加内容,请使用另一个dateadd()。这将为您提供与实际日期时间的比较。
现在你正在"之间"使用日期时间和字符串。
我很惊讶它没有抛出错误。
答案 1 :(得分:2)
如果是2012年以上,您可以使用format()
将时间附加到日期/日期时间值
示例强>
Declare @startdate date = '2017-01-01'
Select format(@startdate,'yyyy-MM-dd 06:00:00')
<强>返回强>
2017-01-01 06:00:00
此format()
可以包含在您的
...
Where SomeDateTime between format(@startdate,'yyyy-MM-dd 06:00:00')
and format(@enddate,'yyyy-MM-dd 17:00:00')