按月获取数据类型为nvarchar的数据

时间:2016-06-27 13:29:28

标签: c# sql-server

我试着白天获取数据,但没有按月和年来获取数据。

需要按月和年检索具有nvarchar数据类型的数据。

tb_class

修改

Select * from tbl_Details WHERE CONVERT(varchar(2), date, 101) = '02' 的格式为date。样本日期为dd/mm/yyyy

3 个答案:

答案 0 :(得分:0)

您需要先转换为DATETIME,然后才能将MONTH()功能用于此目的,例如

select * 
from tbl_Details 
WHERE MONTH(CONVERT(Date, [date], 120)) = 2;

答案 1 :(得分:0)

Select * from tbl_Details WHERE Month(cast(date as Date)) = 2
Or 
Select * from tbl_Details WHERE Month(cast(date as Date)) = 2 and Year(cast(date as Date))=2016
Or
Select * from tbl_Details WHERE Format(cast(date as Date),'yyyy-MM') = '2016-02'

答案 2 :(得分:0)

这不是最佳解决方案,而是实现结果的方法之一。

首先,Date是保留关键字,所以不要使用它,尝试使用其他名称。

如果您的日期字段位于VARCHAR中,则可以按PARSENAME

检查条件
SELECT * FROM @tbl_Details WHERE PARSENAME(REPLACE(SampleDate, '-', '.'), 2) = '02';

执行相同的示例:

DECLARE @tbl_Details TABLE (SampleDate VARCHAR (20));

INSERT INTO @tbl_Details (SampleDate) VALUES
('2016-06-27'), ('2016-02-27'), ('2016-05-27'), ('2016-02-12');

SELECT *
FROM @tbl_Details 
WHERE PARSENAME(REPLACE(SampleDate, '-', '.'), 2) = '02';

如果日期格式以2016/02/27的格式存储,则在替换函数中使用'/'代替上面查询中的'-'

<强>更新

OP的date格式为dd/mm/yyyy,因此以下查询适用于他的情况:

SELECT *
FROM @tbl_Details 
WHERE PARSENAME(REPLACE(SampleDate, '/', '.'), 2) = '02'
      AND PARSENAME(REPLACE(SampleDate, '/', '.'), 1) = '2016';