2016-04-27 242 views
0

我想获取其开始日期+开始时间已过或等于当前日期时间的对象,并且其结束日期+结束时间未通过当前日期时间。我试着将当前的日期时间转换为nvarchar,因为我所有的列都是nvarchar。我也尝试将我的列转换为日期时间类型,但它不起作用。请帮助SQL服务器日期时间

柱:

startDate - nvarchar (dd/mm/yyyy) 
startTime - nvarchar (hh:mm) 24 hr 
endDate - nvarchar(dd/mm/yyyy) 
endTime - nvarchar(hh:mm) 24hr 

我没有尝试,但日期时间betwween的startDate + 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) 
+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值。

请注意,如果您使用正确的数据类型设计表格,则可以废除这种情况。

+0

谢谢!它完美的作品! – lel

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)