使用nvarchar的强制转换日期在sql查询中不起作用

时间:2018-04-25 07:48:23

标签: sql sql-server

我有这样的查询:

SELECT DISTINCT
       [Date_of_Receipt]
FROM RPT_VIEW_Receive
WHERE CAST([Date_of_Receipt] AS NVARCHAR) >= '12-12-2016'
ORDER BY [Date_of_Receipt];
SELECT DISTINCT
       [Date_of_Receipt]
FROM RPT_VIEW_Receive;

enter image description here

我有一个名为 RPT_VIEW_Receive

的视图

在我看来,所有日期都大于2017年,

但是在我的第一个查询中,我想要显示大于2016年的所有记录..但它没有显示所有记录,

可能是什么问题???

4 个答案:

答案 0 :(得分:1)

尝试这个..检查你通过的第二个操作数中的静态日期(12-12-2016)

SELECT DISTINCT
       [Date_of_Receipt]
FROM RPT_VIEW_Receive
WHERE CAST([Date_of_Receipt] AS date) >=  CAST('12-12-2016' AS date)
ORDER BY [Date_of_Receipt];
SELECT DISTINCT
       [Date_of_Receipt]
FROM RPT_VIEW_Receive;

答案 1 :(得分:1)

您的问题似乎与日期列[Date_of_Receipt]的格式有关。 我们必须注意日期是DD / MM / YYYY。

尝试使用CONVERT代替CAST

SELECT DISTINCT
       CONVERT(DATE,[Date_of_Receipt],103)
FROM RPT_VIEW_Receive

CONVERT的最后一个参数是我们用于解析的格式。 这应该有用。

答案 2 :(得分:0)

请尝试这样..不要在where子句中使用强制转换。它会妨碍性能。 Date_of_Receipt的数据类型是什么?

select distinct  [Date_of_Receipt] from RPT_VIEW_Receive  
where [Date_of_Receipt] >= '20170101'
order by [Date_of_Receipt]

答案 3 :(得分:0)

尝试此查询如果您将日期存储为nvarchar(50)

SELECT DISTINCT [Date_of_Receipt]
FROM Table
WHERE Cast([Date_of_Receipt] AS DATE) >= '12/12/2016'
ORDER BY [Date_of_Receipt];

如果日期存储为date(建议使用),则可以执行此操作。

SELECT DISTINCT [Date_of_Receipt]
FROM Table
WHERE [Date_of_Receipt] >= '12/12/2016'
ORDER BY [Date_of_Receipt];

注意:这将显示大于11/12/2016的所有记录。如果您要显示大于2016年的所有记录,请使用01/01/2017代替12/12/2016