Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按月获取数据,数据类型为nvarchar_C#_Sql Server - Fatal编程技术网

C# 按月获取数据,数据类型为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]

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

需要按月份和年份检索具有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], 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';