我正在使用下面的查询,我希望得到“[最后更新日期]”在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%'
这个结果给了我500,000 +行。
如果我每年以这种方式运行它会减少结果:
AND [Last Update Date] like '%2015%'
知道我在这里做错了吗?最后2条和陈述给了我不同的结果TIA
答案 0 :(得分:3)
尝试
WHERE CONVERT(DATETIME, [Last Update Date] , 103) BETWEEN '2015/01/01' AND '2016/12/31'
检查此页面以了解不同的格式
http://www.sql-server-helper.com/sql-server-2008/sql-server-2008-date-format.aspx
答案 1 :(得分:2)
编辑:显然我错了。留下答案以供参考不问题。但是,CAST
代码可能仍然有用。
首先,您不能将BETWEEN
与文本数据一起使用,您必须使用日期时间或数字格式。如果[Last update Date]
是文字,您需要将其转换为日期时间,然后才能对其执行任何操作。最好是改变你的实际数据格式,但如果由于某种原因你不能这样做可能会有效:
AND (CAST([Last Update Date] as datetime)
BETWEEN CAST('2015/01/01' as datetime) AND CAST('2016/12/31' as datetime))
关于like '%2015%'
语句,您使用的通配符条件专门用于文本数据;这就是它起作用的原因。不同的行数是因为第一个like
正在寻找 2015和2016年,而第二个正在寻找仅 2015。