【发布时间】:2016-06-21 10:54:52
【问题描述】:
2 示例代码:
WITH A AS
(SELECT 'this is a test:12/01/2015 01/05/2018'
|| chr(13)
||chr(10)
|| ' this is the 2nd line: 07/07/2017' Description
FROM dual
)
SELECT to_date(regexp_substr(A.Description , '\d{1,2}/\d{1,2}/\d{4}',1,level),'MM/DD/YYYY')
FROM A
CONNECT BY level <= regexp_count(a.description, '\d{1,2}/\d{1,2}/\d{4}');
/
还有一个:
SELECT DISTINCT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) as "token"
FROM DUAL
CONNECT BY REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) IS NOT NULL
order by 1;
谁能解释一下,为什么在第一种情况下我们使用'
【问题讨论】:
-
在第一个示例中,您也可以使用
IS NOT NULL==> 只需CONNECT BY regexp_substr(a.description, '\d{1,2}/\d{1,2}/\d{4}', 1, level) is not null。在第二个示例中,您可以使用CONNECT BY level <= REGEXP_count ('23,34,45,56','[\,]+') + 1代替IS NOT NULL。很难说为什么有人选择is not null而不是regexp_count,在我看来,这可能只是个人喜好。 -
避免在第二个选择中使用正则表达式来解析分隔列表。它不处理 NULL 列表元素,并且会默默地返回不正确的值。请参阅此处了解更多信息:stackoverflow.com/questions/31464275/…