【问题标题】:Select Minimum START_DATE and Maximum END_DATE from the below data inside a single column从单个列中的以下数据中选择最小 START_DATE 和最大 END_DATE
【发布时间】:2021-10-26 12:53:33
【问题描述】:

"-> CID-29-JAN-21-15-AUG-22 -> FEATURE-25-NOV-15-15-AUG-22 -> FSD PHANTOM SUBASSY-22-NOV-18-15-AUG- 22 -> FSD 幻影 SUBASSY-13-NOV-18-15-AUG-22"

" -> CID-29-JAN-21-15-AUG-22 -> FEATURE-25-NOV-15-15-AUG-22 -> FSD PHANTOM SUBASSY-12-SEP-17-20-SEP- 21 -> FSD 幻影 SUBASSY-07-JUN-17-20-OCT-21 -> FSD 幻影 SUBASSY-06-APR-12-15-AUG-22"

上面是列内相同的数据。

我们需要创建一个查询以从该列中选择 Min Start DateMax End Date

日期不应来自 CID 和功能级别。 start_dateend_date 与项目类型并排写入。

表结构:

CREATE TABLE temp1
(
 path_start_date VARCHAR2(1000),
 start_date      DATE,
 end_date        DATE
);

INSERT INTO temp1 (PATH_START_DATE) 
VALUES(' -> CID-29-JAN-21-15-AUG-22 -> FEATURE-25-NOV-15-15-AUG-22 -> FSD PHANTOM SUBASSY-22-NOV-18-15-AUG-22 -> FSD PHANTOM SUBASSY-13-NOV-18-15-AUG-22');

期望的输出:

Start_Date = 13-NOV-18
End_Date   = 15-AUG-22

这些值需要填充到表格的开始和结束日期列中。

【问题讨论】:

  • 数据是如何存储在表中的?请同时发布表格结构和您的预期输出
  • @AnkitBajpai 添加了详细信息。请看一看。
  • 你确定日期的格式总是FSD PHANTOM SUBASSY-start_date-end_date')
  • 是的,它们总是一样的 :)

标签: sql oracle


【解决方案1】:

如果值的格式在整个表格中是固定的,则使用

WITH t AS
(
 SELECT REGEXP_SUBSTR(path_start_date,'[^>]+',1,level+1) AS piece,
        path_start_date
   FROM temp1
CONNECT BY level <= REGEXP_COUNT(path_start_date,'>')  
    AND PRIOR SYS_GUID() IS NOT NULL
    AND PRIOR path_start_date = path_start_date 
), t2 AS
(
  SELECT TO_DATE(SUBSTR(piece,INSTR(piece,'-',1,1)+1,INSTR(piece,'-',1,4)-INSTR(piece,'-',1,1)-1),'DD-MON-RR','NLS_DATE_LANGUAGE=ENGLISH') AS date1,
         TO_DATE(SUBSTR(piece,INSTR(piece,'-',1,4)+1,9),'DD-MON-RR','NLS_DATE_LANGUAGE=ENGLISH') AS date2,
         path_start_date
    FROM t
   WHERE TRIM(REGEXP_SUBSTR(piece,'[^-]+')) NOT IN ('CID','FEATURE') 
)
SELECT path_start_date,MIN(LEAST(date1,date2)) AS "Start_Date", MAX(GREATEST(date1,date2)) AS "End_Date"
  FROM t2 
GROUP BY path_start_date 

为了通过使用REGEXP_SUBSTR()函数以&gt;字符分隔每个子字符串,然后为每个path_start_date值确定四个日期值,同时消除以不需要的子字符串开头的部分

Demo

【讨论】:

  • 您可以通过从表中选择 3 列将其编写为通用查询吗??@Barbaros
  • 非常感谢您的努力。它按预期工作。我会改进它的性能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
  • 2011-01-27
  • 1970-01-01
  • 1970-01-01
  • 2019-05-17
  • 2011-12-14
  • 2021-10-07
相关资源
最近更新 更多