MS SQL数据库在2个日期和时间之间搜索

时间:2014-08-21 13:04:25

标签: sql-server

我的表中有两列名为'日期'和'时间'。我想从特定日期和时间搜索特定日期和时间的记录。我怎么能这样做?

两列的数据类型nvarchar 日期格式dd / mm / yy 时间格式HH:mm:ss

我也传递这些参数: 从日期 至今 从时间 TOTIME

3 个答案:

答案 0 :(得分:0)

SQL Fiddle

SELECT m.*
FROM MyTable m
WHERE CONVERT(Datetime, m.Date + ' ' + m.time, 120) 
      BETWEEN '2003/01/01 07:00:00' AND '2003/12/31 23:00:00';

答案 1 :(得分:0)

1小费。我会更改列名,因为它会导致另一个错误,因为Date可能是内置关键字。

也试试这个..

SELECT * 
FROM xxx 
WHERE dates >= '20121026' 
AND dates <  '20121028'    --- one day after 
                         --- it is converted to '2012-10-28 00:00:00.000'

答案 2 :(得分:0)

为了它的乐趣(并且主要是因为我真的非常不喜欢尝试针对错误的数据类型执行此类操作),您可以使用这样的CAST()函数(假设,无论您的数据类型是什么,它都是可以将其转换为DATETIME)。

编辑以反映作为评论提及的数据类型/格式

DECLARE @MyTable TABLE (MyDate VARCHAR(50), MyTime VARCHAR(50))

INSERT INTO @MyTable (MyDate, MyTime) VALUES ('21/08/2014', '07:29:01')
INSERT INTO @MyTable (MyDate, MyTime) VALUES ('12/08/2014', '09:29:02')
INSERT INTO @MyTable (MyDate, MyTime) VALUES ('21/08/2014', '16:29:04')


SELECT CONVERT(DATETIME, MyDate,103) + CAST(MyTime AS DATETIME) FROM @MyTable
WHERE CONVERT(DATETIME, MyDate,103) + CAST(MyTime AS DATETIME) BETWEEN '8/21/2014' AND GETDATE()

再次修改

那里的额外代码只是为了提供理论的实际演示,因为我无法访问您的源数据 - 将它应用到您的表中只会使用最后一部分,例如:

   SELECT *
   FROM WhateverYourTableIsNamed
   WHERE CONVERT(DATETIME, [Date],103) + CAST([Time] AS DATETIME) BETWEEN '8/21/2014 00:00:00.000' AND '8/21/2014 09:58:32.000'