【发布时间】:2020-11-21 11:43:15
【问题描述】:
我有特定的时间场景,可以是 4 位、6 位,也可以是 NULL 或字符串,如下所述。在场景 3 和 4 中,我计算日期时间的方法不起作用并且为 NULL 有什么方法可以将 00:00:00:000 的日期作为案例 3 和 4 的时间? & 对于 1,它应该是 10:02:00:000
DECLARE @DATE VARCHAR(10) =CAST(GETDATE() AS DATE)
DECLARE @Time1 VARCHAR(10) = '1002'
DECLARE @Time2 VARCHAR(10) = '160634'
DECLARE @Time3 VARCHAR(10) = '0900XX'
DECLARE @Time4 VARCHAR(10) = ''
SELECT TRY_CONVERT(DATETIME, @DATE +' '
+LEFT(ltrim(@Time1), 2)
+ ':' + SUBSTRING(@Time1, 3, 2)
+ ':' + RIGHT(rtrim(@Time1), 2)) , TRY_CONVERT(TIME, @Time1), @Time1 AS Time
SELECT TRY_CONVERT(DATETIME, @DATE +' '
+LEFT(ltrim(@Time2), 2)
+ ':' + SUBSTRING(@Time2, 3, 2)
+ ':' + RIGHT(rtrim(@Time2), 2)) , TRY_CONVERT(TIME, @Time2), @Time2 AS Time
SELECT TRY_CONVERT(DATETIME, @DATE +' '
+LEFT(ltrim(@Time3), 2)
+ ':' + SUBSTRING(@Time3, 3, 2)
+ ':' + RIGHT(rtrim(@Time3), 2)) , TRY_CONVERT(TIME, @Time3), @Time3 AS Time
SELECT TRY_CONVERT(DATETIME, @DATE +' '
+LEFT(ltrim(@Time4), 2)
+ ':' + SUBSTRING(@Time4, 3, 2)
+ ':' + RIGHT(rtrim(@Time4), 2)) , TRY_CONVERT(TIME, @Time4), @Time4 AS Time
【问题讨论】:
-
听起来你真的需要修复你的数据模型。这些值实际代表什么日期和时间?
160634代表什么日期和时间?0900XX呢? -
@Larnu 160634 是 24 小时格式,我不确定 0900XX 是如何进入数据库的。我真的无法修复数据模型,因为它来自 1985 年的 IBM 主机系统,我无法访问该系统,而且当我们已经处于将数据迁移到 SQL 的阶段时,我的公司没有兴趣花费时间和金钱来修复它服务器。
标签: sql-server tsql datetime sql-server-2012