假设我的Web服务的参数year
的值为201718
为字符串。然后在我的查询中,我想在01-04-2017
和31-03-2018
之间找到一些内容。日期是数据库中的datetime
。在我的查询中,我将使用类似这样的东西
select *
from table
where date >= '01-04-2017' and date <= '31-03-18'
如何将格式更改为接受日期为'31 -03-18'?
答案 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)