我正在尝试获取其开始日期+开始时间已过或等于当前日期时间并且其结束日期+结束时间未过当前日期时间的对象。我尝试将当前日期时间转换为nvarchar,因为我所有的列都是nvarchar。我也尝试将列转换为日期时间类型,但是它也不起作用。请帮忙
柱子:
startDate - nvarchar (dd/mm/yyyy)
startTime - nvarchar (hh:mm) 24 hr
endDate - nvarchar(dd/mm/yyyy)
endTime - nvarchar(hh:mm) 24hr
我确实尝试过,但是datetime在startDate + startTime和endDate + startTime之间,但是它似乎不起作用:
SELECT * FROM Promo
WHERE membership = '1'
AND promoStatus = '1'
AND CONVERT(NVARCHAR, GetDate(), 101) + ' ' +
CONVERT(NVARCHAR, DATEPART(hh, GetDate())) + ':' +
RIGHT('0' + CONVERT(NVARCHAR, DATEPART(mi, GetDate())), 2) BETWEEN
startDate + ' ' + startTime
AND endDate + ' ' + endTime
我也尝试过其他方法:
SELECT * FROM Promo
WHERE membership = '1'
AND promoStatus = '1'
AND startDate + ' ' + startTime <= CONVERT(NVARCHAR, GetDate(), 101) + ' ' +
CONVERT(NVARCHAR, DATEPART(hh, GetDate())) + ':' +
RIGHT('0' + CONVERT(NVARCHAR, DATEPART(mi, GetDate())), 2)
AND endDate + ' ' + endTime >= CONVERT(NVARCHAR, GetDate(), 101) + ' ' +
CONVERT(NVARCHAR, DATEPART(hh, GetDate())) + ':' +
RIGHT('0' + CONVERT(NVARCHAR, DATEPART(mi, GetDate())), 2)
您可以这样做:
SELECT *
FROM Promo
WHERE
membership = '1'
AND promoStatus = '1'
AND CAST(CONVERT(VARCHAR(16), GETDATE(), 120) AS DATETIME) BETWEEN
CONVERT(DATETIME, @startDate, 103) + CONVERT(DATETIME, @startTime)
AND CONVERT(DATETIME, @endDate, 103) + CONVERT(DATETIME, @endTime)
这行:
CAST(CONVERT(VARCHAR(16), GETDATE(), 120) AS DATETIME)
获取当前日期时间(以分钟为单位),这意味着这将剥夺的秒和毫秒部分GETDATE()
。
这行:
CONVERT(DATETIME, @startDate, 103) + CONVERT(DATETIME, @startTime)
将结合您的日期和时间变量以形成一个新DATETIME
值。
请注意,如果使用正确的数据类型设计表,则可以取消此操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句