【发布时间】:2015-05-20 12:32:42
【问题描述】:
我需要将视图的多个列中的 VARCHAR 值转换为 DATETIME,以便在 SQL Server 2008 上的另一个应用程序中进行排序和格式化(以区域设置格式显示)。
目前有两个问题。
-
VARCHAR值的输入格式不同(但在 列级) - 也可能存在错误值(例如:20..05.2015)
很遗憾,TRY_CONVERT 函数仅适用于 SQL Server 2012 及更高版本。
ISDATE 不起作用,因为视图包含不同的日期格式,我既不能在用户定义的函数中也不能在视图中设置语言,这会导致 ISDATE 使用例如德语日期格式。
我的问题有什么更简单的解决方案吗? 我的第一个想法是写一个类似的函数
FUNCTION TryConvertStringAsDatetime ( @value VARCHAR(MAX),
@format INT
)
它使用CONVERT 函数的格式编号,但手动检查每种可能的格式让我有点害怕。
示例:TryConvertStringAsDatetime('20.05.2015', 104)(带有一些伪代码)
SET @day = character 1 and 2
SET @month = character 4 and 5
SET @year = character 7, 8, 9 and 10
SET @dateODBCFormat = @year - @month - @day (concatenated with hyphen and not subtracted :)
IF ISDATE(@dateODBCFormat ) = 1
RETURN CONVERT(DATETIME, @dateODBCFormat, 120)
ELSE
RETURN CONVERT(DATETIME, 0) (does the job)
【问题讨论】:
-
您会遇到哪些日期格式?
-
没有简单的内置解决方案。您将不得不分析您的数据以了解您需要支持哪些转换规则并编写自定义代码来转换它。在前端应用程序或 CLR proc 中可能会更好。
-
目前有104(德语)和120(ODBC)格式的值。
标签: sql-server sql-server-2008 tsql datetime format