我正在尝试将 varchar mm/dd/yyyy 数据转换/转换为日期时间 mm/dd/yyyy 格式,以便我可以使用 between 子句查询范围。
我之前看到过类似的问题,但日期中没有斜线,我不知道如何解决这个问题。
我正在尝试将 varchar mm/dd/yyyy 数据转换/转换为日期时间 mm/dd/yyyy 格式,以便我可以使用 between 子句查询范围。
我之前看到过类似的问题,但日期中没有斜线,我不知道如何解决这个问题。
要进行适当的范围查询,您可以以可预测的方式从错误的区域格式转换,然后使用开放式范围。现在,这并不能保护您免受某人进入06/08/2013
并表示 8 月 6 日而不是 6 月 8 日,但如果您支持自由文本输入,那么您将不得不承担风险。
DECLARE @s DATETIME, @e DATETIME;
SELECT @s = CONVERT(DATETIME, '03/13/2013', 101),
@e = CONVERT(DATETIME, '03/26/2013', 101);
SELECT <cols>
FROM dbo.table_name
WHERE datetime_column >= @s
AND datetime_column < DATEADD(DAY, 1, @e);
理想情况下,您不允许用户输入诸如m/d/y
. 如果您控制存储过程的输入格式,则可以发送明确的日期文字,例如YYYYMMDD
. 或者更好的是,使用强类型参数。您可以从用户输入临时废话中获得的越多,您的头痛就越少。请阅读这些文章: