【问题标题】:SQL Date Format from 1YYMMDD to normalSQL 日期格式从 1YYMMDD 到正常
【发布时间】:2018-01-21 01:34:11
【问题描述】:

我正在使用 SQL for IBM System i Access for Windows Version 6 Release 1 从绿屏 AS400 中提取数据。我认为那将是 DB2?

日期数据的格式为 1yymmdd,例如,对于 2016 年 10 月 15 日,日期将为 1161015。我希望将该列的日期数据从 1yymmdd 格式转换为 MM/DD/YYYY 并被识别为日期不一个号码。

部分问题是如果我想检查两个条目之间的日期差异,它会将其识别为一个数字(例如 1171015-1161016 = 10,000),但我希望它是 365 天。

将这种日期格式 (1yymmdd) 转换为 (MM/DD/YYYY) 的好的转换方法是什么?

我正在使用的代码示例:

sSQL = SELECT A.DATE, curdate() 
            FROM TABLE1 A 
            LIMIT 10

输出如下

1141220 8/16/2017
1130308 8/16/2017
1141220 8/16/2017
1141220 8/16/2017
1140822 8/16/2017
1140822 8/16/2017
1141206 8/16/2017
1141220 8/16/2017
1140913 8/16/2017
1141206 8/16/2017

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。
  • 转换日期和日期的函数高度特定于特定的 RDMS(Oracle、SQL Server、MySQL、PostgreSQL 等)。请用您正在使用的 RDBMS 标记您的问题。我怀疑的一件事是最好以字符串格式捕获数据,并且不要“复制”前导1
  • 我不确定这意味着什么,但我正在使用 sql for ibm iseries

标签: sql date format db2


【解决方案1】:

您可以使用DATENAME 函数来获取月份的名称。要获取日期和年份,只需使用CAST

SELECT DATENAME(MM, GETDATE()) AS [DD Month] + ' ' + CAST(DAY(GETDATE()) AS VARCHAR(2)) + ' ' + CAST(YEAR(GETDATE()) AS VARCHAR(4)) AS [DD Month YYYY]

您还可以从SQL-SERVER-helper 页面查看其他可用格式

【讨论】:

    【解决方案2】:

    我能够弄清楚如何正确编码(例如 A.DATE = 1161015)

    SELECT DATE( TIMESTAMP( (A.DATE + 19000000) CONCAT'000000') ) 
    FROM TABLE1 A 
    

    答案:

    10/15/2016
    

    如果你想找出天的差异(例如 A.DATE1 = 1161015 , A.DATE2 = 1161215):

    SELECT  ( DAYS( DATE(TIMESTAMP((A.DATE2 + 19000000) CONCAT'000000'))) - DAYS(DATE(STANMP((A.DATE1+ 19000000) CONCAT'000000'))) )
    FROM TABLE1 A 
    

    答案:

    58
    

    感谢大家的帮助!

    【讨论】:

      猜你喜欢
      • 2016-11-23
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 1970-01-01
      相关资源
      最近更新 更多