SQL Server 2005 varchar,数据ddmmyyyy为datetime格式

时间:2016-07-11 02:26:26

标签: sql-server date datetime

我的应用程序数据库表JOB中有一个列完成日期,其数据类型为16/07/11 09:44:38 INFO storage.MemoryStore: Block broadcast_924 stored as values in memory (estimated size 24.4 KB, free 2.8 MB) Exception in thread "dag-scheduler-event-loop" java.lang.OutOfMoryError: Java heap space (非常奇怪),但此列以任意格式存储日期值,如varchar(16)(例如 - 19841511),{ {1}}(例如 - 19841215),yyyyddmm(例如 - 01012007)。

我只想将数据转换为统一的日期时间格式,这是SQL Server 2005的默认日期时间格式

yyyymmdd

你能帮我解决一下这个问题吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

好吧,我希望你有一个系统的方法来知道哪一行存储的方式,因为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 [.fractional seconds]

希望这至少能帮助你找到正确的答案!