我正在尝试获取其开始日期+开始时间已经过去或等于当前日期时间的对象及其结束日期+结束时间尚未通过当前日期时间。我尝试将当前日期时间转换为nvarchar,因为我的所有列都是nvarchar。我也尝试将我的列转换为日期时间类型,但它也不起作用。请帮忙
柱:
<input type="text" ng-model="value">
我确实尝试过startDate + startTime和endDate + startTime之间的日期时间, 但它似乎不起作用:
startDate - nvarchar (dd/mm/yyyy)
startTime - nvarchar (hh:mm) 24 hr
endDate - nvarchar(dd/mm/yyyy)
endTime - nvarchar(hh:mm) 24hr
我也尝试了其他方法:
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
答案 0 :(得分:0)
你可以这样做:
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
值。
请注意,如果使用正确的数据类型设计表,则可以省去它。
答案 1 :(得分:0)
试试这个
SELECT * FROM Promo
WHERE membership = '1'
AND promoStatus = '1'
AND CAST(CONVERT(VARCHAR(16), GetDate(), 120) AS DATETIME)
BETWEEN CONVERT(DATETIME, startDate + ' ' + startTime, 120)
AND CONVERT(DATETIME, endDate + ' ' + endTime, 120)