Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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
两个日期之间的SQL未返回正确的结果_Sql_Sql Server_Tsql - Fatal编程技术网

两个日期之间的SQL未返回正确的结果

两个日期之间的SQL未返回正确的结果,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在使用下面的查询,我想得到“[上次更新日期]”在2015年或2016年的行 SELECT [NPI] ,[Entity Type Code] ,[Replacement NPI] ,[Employer Identification Number (EIN)] ,[Provider Organization Name (Legal Business Name)] ,[Provider Last Name (Legal Name)]

我正在使用下面的查询,我想得到“[上次更新日期]”在2015年或2016年的行

SELECT [NPI]
      ,[Entity Type Code]
      ,[Replacement NPI]
      ,[Employer Identification Number (EIN)]
      ,[Provider Organization Name (Legal Business Name)]
      ,[Provider Last Name (Legal Name)]
      ,[Provider First Name]
      ,[Provider Middle Name]
      ,[Provider Name Prefix Text]
      ,[Provider Name Suffix Text]
      ,[Provider Credential Text]
      ,[Provider Enumeration Date]
      ,[Last Update Date]
      ,[Healthcare Provider Taxonomy Code_1]

  FROM [Database].[dbo].[NPIInfo]
  WHERE[Healthcare Provider Taxonomy Code_1] in ('122300000X', '1223G0001X','1223P0221X','1223P0700X')
  AND ([Last Update Date] BETWEEN '2015/01/01' AND '2016/12/31' )
  order by [Last Update Date]
当我运行上面的代码时,我没有收到任何结果。但如果我用这个“AND”语句运行它,我会得到结果:

AND [Last Update Date] like '%2015%' or [Last Update Date] like '%2016%' 
这个结果给了我500000多行

如果我每年都以这种方式运行,结果会少得多:

AND [Last Update Date] like '%2015%'
知道我做错了什么吗?最后两个和语句给出了不同的结果

 WHERE CONVERT(DATETIME, [Last Update Date] , 103) BETWEEN '2015/01/01' AND '2016/12/31'
检查此页面以了解不同的格式

试试看

 WHERE CONVERT(DATETIME, [Last Update Date] , 103) BETWEEN '2015/01/01' AND '2016/12/31'
检查此页面以了解不同的格式


编辑:显然我错了。留下答案供参考,以确定什么不是问题。但是,
CAST
代码可能仍然有效

首先,不能对文本数据使用
BETWEEN
,必须使用日期时间或数字格式。如果
[上次更新日期]
是文本,则需要将其转换为日期时间,然后才能对其执行任何操作。最好更改实际数据的格式,但如果由于某种原因无法更改,这可能会起作用:

AND (CAST([Last Update Date] as datetime) 
BETWEEN CAST('2015/01/01' as datetime) AND CAST('2016/12/31' as datetime))

关于您的
语句,如“%2015%”
语句,您使用的通配符条件专门用于文本数据;这就是为什么它能起作用。不同的行数是因为第一个像一样的行数同时查找2015年和2016年,而第二个只查找2015年。

编辑:显然我在这里错了。留下答案供参考,以确定什么不是问题。但是,
CAST
代码可能仍然有效

首先,不能对文本数据使用
BETWEEN
,必须使用日期时间或数字格式。如果
[上次更新日期]
是文本,则需要将其转换为日期时间,然后才能对其执行任何操作。最好更改实际数据的格式,但如果由于某种原因无法更改,这可能会起作用:

AND (CAST([Last Update Date] as datetime) 
BETWEEN CAST('2015/01/01' as datetime) AND CAST('2016/12/31' as datetime))


关于您的
语句,如“%2015%”
语句,您使用的通配符条件专门用于文本数据;这就是为什么它能起作用。不同的行数是因为第一个
类似的
同时查找2015年和2016年,而第二个只查找2015年。

上次更新日期是什么类型的
?看起来像是一个字符串,可能是一种不同的格式,添加了基于所用非标准标识符的
sql server
语法。如果您使用的是不同的DBMS,请重新标记它是一个varchar(200)。请尝试从[NPIInfo]
中选择前100名[上次更新日期],查看日期格式,如图所示:2015年2月1日varchar 200上次更新日期是什么类型?看起来像是一个字符串,可能是一种不同的格式,添加了基于所用非标准标识符的
sql server
语法。如果您使用的是不同的DBMS,请重新标记它是一个varchar(200)尝试从[NPIInfo]
中选择前100名[上次更新日期]查看日期格式看起来2015年2月1日varchar 200不是
到\u日期
Oracle语法?Oracle或mysql,或postgresql,但肯定不是TSQL。我运行了该命令,但出现了以下错误:从字符串转换日期和/或时间时,转换失败。@user1342164检查链接,看看哪种格式更适合您的情况我认为101或103应该是适合您的格式不是
to_date
Oracle语法?Oracle或mysql,或postgresql,但肯定不是TSQL。我运行了该命令,但出现了以下错误:从字符串转换日期和/或时间时,转换失败。@user1342164检查链接,看看哪种格式更适合您的情况我认为101或103应该适合您您您可以对文本数据使用
between
,但日期必须采用格式
YYYY/MM/DD
您完全可以在文本数据中使用BETWEEN。不要使用文本存储日期。不要在日期范围内使用between。我们之间只是一个懒惰的语法快捷方式,如果使用时没有很好的理解它可能会导致错误的选择和计算。改为使用>=和<。@由\u使用\u您已经可以解释如何在两条线索之间导致错误了吗?关于这一点有很多参考文献,请尝试从这些参考文献开始,您可以使用
BETWEEN
来存储文本数据,但日期必须采用
YYYY/MM/DD
格式,您绝对可以使用BETWEEN来存储文本数据。不要使用文本来存储日期。不要在日期范围内使用between。我们之间只是一个懒惰的语法快捷方式,如果使用时没有很好的理解它可能会导致错误的选择和计算。请改用>=和<。@Used\u By\u已经可以解释为什么会导致错误了吗?关于这方面的参考文献很多,请尝试从这些开始,然后