【发布时间】:2017-07-20 10:00:35
【问题描述】:
我有一个表,其中包含一个名为 ArrivalDate 的 VARCHAR 字段,格式为 yymmdd(例如 170202)。 我正在编写一个将其转换为 yyyymmdd 的查询,因此它应该变为 20170202。
但是我的问题是我需要处理在字段中输入不适当数据的情况,并且我的查询需要排除该数据。我通过使用 TSQL 的 ISDATE 函数来实现此排除。我还需要选择最近的条目(为此我使用按 asc 排序)。
我正在使用各种转换来编写此查询,下面是我的示例表和数据的实现。
Declare @tmp TABLE (theDates VARCHAR(MAX))
INSERT INTO @tmp VALUES('170202')
SELECT TOP 1 t.theDates
WHEN (ISDATE(t.theDates) = 1) THEN CONVERT( VARCHAR(max),CONVERT(datetime t.theDates), 112)
FROM @tmp t
WHERE (ISDATE(t.theDates) = 1)
ORDER BY CAST(t.theDates as DATE)
但是,我不喜欢我的方法,它偶尔会导致转换失败,并引发错误,例如 02/02/02 等值会中断查询。有人可以告诉我编写此功能的更好方法吗?
非常感谢!
【问题讨论】:
-
为什么你会存储日期而不是日期?
-
使用 SQL Server 2012 及更高版本,TRY_CONVERT 可能就是您要找的。span>
-
这只是与@ErikPhilips 合作的表格。我没有编写架构,我永远不会将日期存储为 VARCHAR
标签: sql-server tsql date stored-procedures