C# 按月获取数据,数据类型为nvarchar
我试着按天获取数据,但没有按月份和年份获取数据 需要按月份和年份检索具有nvarchar数据类型的数据C# 按月获取数据,数据类型为nvarchar,c#,sql-server,C#,Sql Server,我试着按天获取数据,但没有按月份和年份获取数据 需要按月份和年份检索具有nvarchar数据类型的数据 Select * from tbl_Details WHERE CONVERT(varchar(2), date, 101) = '02' 编辑: 日期的格式为dd/mm/yyyy。示例日期为2016年2月24日,您需要先转换为日期时间,然后才能使用MONTH()函数 select * from tbl_Details WHERE MONTH(CONVERT(Date, [date]
Select * from tbl_Details WHERE CONVERT(varchar(2), date, 101) = '02'
编辑:
日期的格式为dd/mm/yyyy
。示例日期为2016年2月24日,您需要先转换为日期时间,然后才能使用MONTH()
函数
select *
from tbl_Details
WHERE MONTH(CONVERT(Date, [date], 120)) = 2;
这不是最好的解决方案,而是实现结果的方法之一
首先,是保留关键字,所以不要使用它,尝试使用其他名称
如果日期字段位于VARCHAR中,则可以通过
相同的示例执行:
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的日期
格式为dd/mm/yyyy
,因此下面的查询在他的情况下有效:
SELECT *
FROM @tbl_Details
WHERE PARSENAME(REPLACE(SampleDate, '/', '.'), 2) = '02'
AND PARSENAME(REPLACE(SampleDate, '/', '.'), 1) = '2016';
那么日期列在tbl_详细信息表中存储为nvarchar?是的。不要在varchar列中存储日期。使用正确的数据类型。是的,这是正确的,但我需要仅按nvarchar数据类型检索数据。日期列在tbl_详细信息中存储为nvarchar。您应该从函数开始,找出哪些行包含的“日期”不是真正的日期。从字符串转换日期和/或时间时,转换失败。@KhodayAnvesh,这取决于价值。确保date
列中的值是日期类型,否则转换将失败。从字符串转换日期和/或时间时转换失败。告诉我您有一些错误数据,因此,原因日期为日期。@KhodayAnvesh:在年度筛选器的答案末尾更新。虽然这是可行的,但这是一种不推荐的方式。相反,您应该始终确保1。在datetime列2中存储datetime值。有效日期时间值仅存在(从应用程序端进行验证)我可以按月获取数据,但不能按年获取。您能否共享日期
字段的样本数据?它是yyyy-mm-dd
格式?@KhodayAnvesh:对于您的格式,您需要PARSENAME(替换(SampleDate,“/”,“.”),1)=“2016”
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';
SELECT *
FROM @tbl_Details
WHERE PARSENAME(REPLACE(SampleDate, '/', '.'), 2) = '02'
AND PARSENAME(REPLACE(SampleDate, '/', '.'), 1) = '2016';