【问题标题】:SQL Server - convert short date in from old databaseSQL Server - 从旧数据库转换短日期
【发布时间】:2019-08-08 08:03:27
【问题描述】:

我有旧的 DBF 数据库,其中包含旧的 6 位格式的日期,例如 291292150793 甚至 010302

我将表导入 SQL Server,现在我需要将其转换为 datetime 格式。

当然必须先转换成类似的字符串29.12.199215.07.199301.03.2002

【问题讨论】:

  • 转换这些日期之一的逻辑是什么,即转换为哪个日期,例如291292对应?
  • 291292 是美国格式的1992-12-29
  • 肯定是美国格式?我们是 MDY: 12-29-1992
  • 你试过什么?因为这看起来相当简单......例如将第 5 和第 6 个字符加上第 3 和第 4 个字符加上第 1 和第 2 个字符作为日期非常简单......
  • 注意:SQL Server 不以任何特定或特定格式存储日期。

标签: sql-server tsql date type-conversion


【解决方案1】:

你可以试试这个。

    GO
    declare @date date
    set @date = '901124'
    select CONVERT(varchar(10), @date, 102) as [Date]   --- for yyyy.MM.dd format

试试这个

    declare @dd varchar(10)
    set @dd = '201292'

    select CONVERT(VARCHAR(10), @dd, 2),   CONVERT(VARCHAR(10), GETDATE(), 2) 
    , (SUBSTRING(@dd, 5,2) +  SUBSTRING(@dd, 3,2)  + SUBSTRING(@dd, 1,2))
    ,   CONVERT(varchar(10), cast((SUBSTRING(@dd, 5,2) +  SUBSTRING(@dd, 3,2)  + SUBSTRING(@dd, 1,2)) as DATE) , 102) 

【讨论】:

  • 我有ddmmyy 日期格式并尝试update1 中的代码查看问题,但遗憾的是它没有转换为日期,只需给我一个字符串901124
【解决方案2】:

好吧,很简单:

GO
    declare @date varchar(6)
    set @date = '241190'
    select CONVERT(date, concat(SUBSTRING(@date, 5,2),SUBSTRING(@date, 3,2),SUBSTRING(@date, 1,2)), 101) as [Date] 

结果是1990-11-24

【讨论】:

    【解决方案3】:
         declare @date date = '901124'   
       select CONVERT(date, @date) as [Date]  
    

    【讨论】:

    • 请在您的回答中添加一些解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 2014-04-09
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    相关资源
    最近更新 更多