我的应用程序数据库表 JOB 中有一个列完成日期,其数据类型为 varchar(16)
(很奇怪),但此列以任性的格式存储日期值,例如yyyyddmm
(例如 - 19841511)、yyyymmdd
(例如 - 19841215)、ddmmyyyy
(例如 - 01012007)。
我只想将数据转换为一种统一的日期时间格式,这是SQL Server 2005的默认日期时间格式,即
yyyy-mm-dd 00:00:00.000
你们能帮我解决这个问题吗?
提前感谢!
好吧,我希望您有一种系统的方法来确定哪一行以哪种方式存储,因为DATETIME
没有默认格式,并且您的字符串以错误的格式存储...因为这种格式在 SQL 中不存在。没有外界的帮助,SQL就无法知道。
- 没有格式
YYYY-DD-MM
日期。看起来像自定义工作。:/ - VARCHAR(16) 也意味着您的
DATETIME
格式没有任何秒数...耶!:(
除非您事先知道哪些日期被格式化了什么,否则如果不回到发布这些"日期"的来源,几乎不可能解决这个问题。
SELECT CASE WHEN ISDATE('19841511') = 0
THEN SUBSTRING('19841511', 1, 4) + '-' --YEAR
+ SUBSTRING('19841511', 7, 2) + '-' -- MONTH
+ SUBSTRING('19841511', 5, 2) END AS [YYYY-MM-DD]
, CASE WHEN ISDATE('01012007') = 0
THEN SUBSTRING('01012007', 5, 4) + '-' --YEAR
+ SUBSTRING('01012007', 3, 2) + '-' --MONTH
+ SUBSTRING('01012007', 1, 2) END AS [YYYY-MM-DD]
请注意两种格式的区别...并且这两种格式都不以 SQL Server 识别的日期格式存储。
-
DATETIME2
确实使用您要查找的默认格式 YYYY-MM-DD hh:mm:ss[.小数秒]
希望这至少能让你找到正确的答案!