我试着白天获取数据,但没有按月和年来获取数据。
需要按月和年检索具有nvarchar数据类型的数据。
tb_class
修改
Select * from tbl_Details WHERE CONVERT(varchar(2), date, 101) = '02'
的格式为date
。样本日期为dd/mm/yyyy
答案 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';