【问题标题】:Cast string to date in SQL (dbeaver)在 SQL (dbeaver) 中将字符串转换为日期
【发布时间】:2021-07-17 08:37:41
【问题描述】:

我在数据库中有一个日期“1190502”,表示 02/05/2019。

+---------+
|   DT    |
+---------+
| 1190502 |
| 1190503 |
| 1190504 |
| 1190505 |
| 1190506 |
| 1190507 |
+---------+

我想将其转换为日期格式;

尝试了以下查询,但弹出错误;

SELECT CAST(SUBSTRING(DT,6,2)+'/'+SUBSTRING(DT,4,2)+'/'+'20'+SUBSTRING(DT,2,2) AS DATE) FROM table

【问题讨论】:

  • 虽然貌似是sql-server,但是请加你的rdbms
  • 前导数字(本例中为 1)的意义是什么?
  • 这个字符串似乎很混乱。前面的1 是什么意思?
  • 我正在使用 dbeaver。是的,这里不需要“1”。我也需要摆脱那个数字
  • [SQL0402] + 使用无效.....弹出此错误

标签: sql casting db2


【解决方案1】:

如果您的 SQL Server 版本支持,您可以在此处使用TRY_CONVERT

SELECT TRY_CONVERT(datetime, SUBSTRING('1190502', 2, 6));  -- 2019-05-02 00:00:00.000

或者,您可以使用带有正确格式掩码的旧版 CONVERT 函数:

SELECT CONVERT(datetime, SUBSTRING('1190502', 2, 6), 112);  -- 2019-05-02 00:00:00.000

【讨论】:

    【解决方案2】:

    SQL0402 SQLCODE -402

    SQLSTATE 42819 解释:&1 使用无效。

    这是一个 DB/2 错误消息,因此请尝试使用 concat:

    SELECT CAST(SUBSTRING(DT,6,2) concat '/' concat SUBSTRING(DT,4,2) concat '/20' concat SUBSTRING(DT,2,2) as DATE) 
    FROM table
    

    db-fiddle

    【讨论】:

      【解决方案3】:

      试试这个:

      SELECT C, DATE(TO_DATE(SUBSTR(C, 2), 'YYMMDD')) D
      FROM
      (
      VALUES
        '1190502'
      , '1190503'
      , '1190504'
      , '1190505'
      , '1190506'
      , '1190507'
      ) T (C);
      
      |C      |D         |
      |-------|----------|
      |1190502|2019-05-02|
      |1190503|2019-05-03|
      |1190504|2019-05-04|
      |1190505|2019-05-05|
      |1190506|2019-05-06|
      |1190507|2019-05-07|
      

      【讨论】:

      • 但实际上,您不应该只是“摆脱”第一个字符。似乎第一个字符是世纪。 0 - 20-th, 1 - 21-th, etc. 所以,正确的表达式应该是DATE(TO_DATE('00'||SUBSTR(C, 2), 'YYYYMMDD') + (1900 + INT(SUBSTR(C, 1, 1)) * 100) YEARS)
      猜你喜欢
      • 2021-12-25
      • 2015-08-23
      • 2013-07-12
      • 2018-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多