SQL服务器日期时间

时间:2016-04-27 04:32:37

标签: sql-server datetime

我正在尝试获取其开始日期+开始时间已经过去或等于当前日期时间的对象及其结束日期+结束时间尚未通过当前日期时间。我尝试将当前日期时间转换为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 

2 个答案:

答案 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)