SQL Server查询日期格式

时间:2018-01-18 06:03:36

标签: sql sql-server tsql

假设我的Web服务的参数year的值为201718为字符串。然后在我的查询中,我想在01-04-201731-03-2018之间找到一些内容。日期是数据库中的datetime。在我的查询中,我将使用类似这样的东西

select * 
from table 
where date >= '01-04-2017' and date <= '31-03-18'

如何将格式更改为接受日期为'31 -03-18'?

1 个答案:

答案 0 :(得分:1)

在SQL Server中使用字符串表示日期时,最好使用yyyyMMdd 对于日期时间值,最好使用yyyy-MM-ddTHH:mm:ss 原因是SQL Server将始终以相同的方式处理这些格式,无论服务器的本地设置如何 但是,使用日期/日期时间的字符串表示仍然是一个坏主意。

假设您有一个存储过程将Years作为字符串,您要做的是从此字符串中获取日期值。像这样:

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

请注意,datefromparts是在2012版本中引入的,因此如果您使用的是旧版本,则需要将其替换为cast

SELECT @DateFrom = CAST(LEFT(@Years, 4) + '0401' as date),
       @DateTo = CAST(LEFT(@Years, 2) + RIGHT(@Years, 2) +'0331' as date)