日期范围搜索 - 使用nvarchar的tSQL

时间:2016-02-19 17:59:17

标签: tsql date-range

不使用正确类型(日期)的道歉。使用nvarchar选择不当,但在此阶段我无法转换。

问题:

我希望能够搜索特定日期范围内的数据,例如10.01.16 - > 16年2月19日

然而,它似乎只带回了前两位数字的数据,因此无论月份和年份如何,所有数据都在10到19之间。

我的查询如下:

SELECT ID, Day, Date FROM oneHr$
WHERE date >= CONVERT(NVARCHAR, '10.01.16', 4)
AND date <= CONVERT(NVARCHAR , '19.02.16', 4)
ORDER BY Date ASC

有什么想法吗?非常感谢并提前感谢。

这是返回的内容:

ID   Day    Date
--------------------
943  fri    10.02.15
746  mon    10.02.16
234  tue    10.03.15
835  fri    10.04.15
988  tue    10.05.15
487  wed    11.01.16
343  wed    11.02.15
874  mon    12.01.16
663  thu    12.01.15
198  tue    12.02.15
775  wed    13.01.16
993  thu    14.01.15
375  fri    15.03.15
337  wed    16.12.15
784  tue    17.11.15
777  mon    18.08.15
252  thu    19.01.16
664  wed    19.02.15

更新

所以,我已将Date更改为datetime类型并且看起来都很好。但是,我试图定义一个范围而不是硬编码它并且它不起作用。有什么想法吗?

set @date1 = '2016-01-01 00:00:00' -- Date1 (start range)
set @date2 = '2016-01-10 00:00:00' -- Date2 (end range)

/* Not Working */
select * from oneHr$
where Date >= @date1
and Date <= @date2
order by ID

/* Working */
select * from oneHr$
where Date >= '2016-01-01 00:00:00'
and Date <= '2016-01-10 00:00:00'
order by ID

1 个答案:

答案 0 :(得分:1)

为什么不做这样的事情?

SELECT ID, Day, Date FROM oneHr$
WHERE CONVERT(DATE, date, 4) >= @Date1
AND CONVERT(DATE, date, 4) <= @Date2
ORDER BY Date ASC

然后您根本不必将输入转换为nvarchar。