SQL Server查询日期格式

SQL Server查询日期格式,sql,sql-server,tsql,Sql,Sql Server,Tsql,假设我的web服务具有参数year,其值201718为字符串。然后在我的查询中,我想找到介于01-04-2017和31-03-2018之间的内容。日期是数据库中的datetime。在我的查询中,我将使用这样的内容 select * from table where date >= '01-04-2017' and date <= '31-03-18' 选择* 从桌子上 其中日期>='01-04-2017'和日期在SQL Server中使用字符串表示日期时,最好使用yyyyMMd

假设我的web服务具有参数
year
,其值
201718
为字符串。然后在我的查询中,我想找到介于
01-04-2017
31-03-2018
之间的内容。日期是数据库中的
datetime
。在我的查询中,我将使用这样的内容

select * 
from table 
where date >= '01-04-2017' and date <= '31-03-18'
选择*
从桌子上

其中日期>='01-04-2017'和日期在SQL Server中使用字符串表示日期时,最好使用
yyyyMMdd

对于日期时间值,最好使用
yyyy-MM-ddTHH:MM:ss

原因是不管服务器的本地设置如何,SQL Server都会以相同的方式处理这些格式。
但是,使用日期/日期时间的字符串表示仍然是个坏主意

因此,假设您有一个将
年份
作为字符串获取的存储过程,您要做的是从该字符串获取日期值。大概是这样的:

CREATE PROCEDURE stp_SelectByYears)
(
    @Years as char(6)
)

AS 

DECLARE @DateFrom date, @DateTo date;

SELECT @DateFrom = DATEFROMPARTS(CAST(LEFT(@Years, 4) as int), 4, 1),
       @DateTo = DATEFROMPARTS(CAST(LEFT(@Years, 2) + RIGHT(@Years, 2) as int), 3, 31)

SELECT * 
FROM table 
WHERE date >= @DateFrom and date <= @DateTo

GO

在查询中使用“31-03-18”之前,您可能应该重新格式化它。以便与“01-04-2017”格式保持一致。通过这种方式,您在查询中使用的是一种格式,这种格式对于datetime sql字段来说应该很好。谢谢。我明白了您的想法。您应该将日期放入适当的数据类型并使用这些数据类型,以避免这些“格式”把戏。如果您真的必须使用字符串,我建议您全部使用yyyy-MM-dd格式,以避免区域设置格式转换错误。
SELECT @DateFrom = CAST(LEFT(@Years, 4) + '0401' as date),
       @DateTo = CAST(LEFT(@Years, 2) + RIGHT(@Years, 2) +'0331' as date)