【问题标题】:Converting VARCHAR2 to DATE in PLSQL在 PLSQL 中将 VARCHAR2 转换为 DATE
【发布时间】:2021-09-23 09:03:42
【问题描述】:

PLSQL 中有一个数据类型为VARCHAR2 的列“A”。它可以包含 120、60、78 等值。这些值基本上表示分钟。

现在有另一列“B”,数据类型为DATE。我需要在SELECT 语句的WHERE 子句中进行以下比较-

WHERE SYSDATE - B > A

如何在此处管理数据类型以便进行比较?

【问题讨论】:

  • PL/SQL 是一种编程语言。这似乎是一个关于 SQL 的问题,而不是 PL/SQL 编程。

标签: sql oracle date date-arithmetic


【解决方案1】:

看起来

where sysdate - B > A / (24 * 60)

因为两个DATE 数据类型值(即SYSDATE - B)的差异是它们之间的天数,所以您必须“转换”A(即分钟) 转换为 天数,所以 - 除以 (24 * 60),因为一天有 24 小时,每小时有 60 分钟。

【讨论】:

    【解决方案2】:

    您可以使用numtodsinterval 代码中可读的显式间隔规范:

    with a as (
      select
        sysdate as dt
        , to_char(level*10, 'tm9') as dt_offset
      from dual
      connect by level < 10
    )
    select
      a.*
      , sysdate + numtodsinterval(to_number(dt_offset, '999999999'), 'MINUTE') as date_new
    from a
    
    DT | DT_OFFSET | DATE_NEW :----------------- | :-------- | :----------------- 2021-07-14 13:17:50 | 10 | 2021-07-14 13:27:50 2021-07-14 13:17:50 | 20 | 2021-07-14 13:37:50 2021-07-14 13:17:50 | 30 | 2021-07-14 13:47:50 2021-07-14 13:17:50 | 40 | 2021-07-14 13:57:50 2021-07-14 13:17:50 | 50 | 2021-07-14 14:07:50 2021-07-14 13:17:50 | 60 | 2021-07-14 14:17:50 2021-07-14 13:17:50 | 70 | 2021-07-14 14:27:50 2021-07-14 13:17:50 | 80 | 2021-07-14 14:37:50 2021-07-14 13:17:50 | 90 | 2021-07-14 14:47:50

    db小提琴here

    【讨论】:

      猜你喜欢
      • 2021-10-03
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      • 1970-01-01
      • 2011-11-28
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多