【发布时间】:2021-01-12 16:57:44
【问题描述】:
我正在尝试将表格分类为各种类别,但我无法获得所需的结果,请检查以下查询结果、现有结果以及预期结果
标准
非标准
临时
TO_BE_DROPPED
SELECT OWNER,
OBJECT_NAME,
REGEXP_REPLACE(OBJECT_NAME, '^([A-Z0-9$]{1,})_([A-Z0-9$]{1,})_.*','\1_\2')AS BEGINNING,
REGEXP_SUBSTR(OBJECT_NAME, '[^_]*$') AS ENDING,
CASE
WHEN REGEXP_LIKE(OBJECT_NAME, '^D(S[CP]?|T)_.+_(T|(W0?[123]?))$')
THEN
'STANDARD'
WHEN REGEXP_LIKE(OBJECT_NAME, '^DB_.+_(D|F|T|W|W1|W2|W3)$')
THEN
'STANDARD'
WHEN REGEXP_LIKE(OBJECT_NAME, '^DE_.+_(D|F|L|T|W|W01|W02|W03|W1|W2|W3)$')
THEN
'STANDARD'
WHEN OBJECT_NAME LIKE 'TBD%'
THEN
'TO_BE_DROPPED'
WHEN OBJECT_NAME LIKE 'TMP%'
THEN 'TEMPORARY_TABLE'
WHEN REGEXP_LIKE(OBJECT_NAME, '^DA_.+_(D|F|L|T|W|W01|W02|W03|W1|W2|W3|A|AD|AM|AQ|AY)$')
THEN
'STANDARD'
ELSE 'NON_STANDARD'
END
AS TABLE_CLASSIFICATION
FROM DBA_OBJECTS
WHERE OWNER IN ('DI_ABC')
AND OBJECT_TYPE = 'TABLE'
GROUP BY OWNER,
OBJECT_NAME
ORDER BY OWNER DESC,
OBJECT_NAME;
现有结果
SNO OWNER OBJECT_NAME BEGINNING ENDING TABLE_CLASSIFICATION
01 DI_SCC DSC_02_CUST_ORD DSC_02 ORD NON_STANDARD
02 DI_SCC DSC_02_CUST_ORD_T DSC_02 T NON_STANDARD
03 DI_SCC DSC_02_CUST_ORD_W DSC_02 W NON_STANDARD
04 DI_SCC DSC_02_CUST_ORD1 DSC_02 ORD1 NON_STANDARD
05 DI_SCC DSC_02_CUST_ORD_4 DSC_02 4 NON_STANDARD
06 DI_SCC DSP_03_CUST_SHP DSP_03 SHP NON_STANDARD
07 DI_SCC DSP_03_CUST_SHP_T DSP_03 T NON_STANDARD
08 DI_SCC DSP_03_CUST_SHP_W DSP_03 W NON_STANDARD
09 DI_SCC DSP_03_CUST_SHP9 DSP_03 SHP9 NON_STANDARD
10 DI_SCC DSP_03_CUST_SHP_62 DSP_03 62 NON_STANDARD
14 DI_SCC DT_CUST_WRD DT WRD NON_STANDARD
15 DI_SCC DT_CUST_WRD_T DT T NON_STANDARD
16 DI_SCC DT_CUST_WRD_W DT W NON_STANDARD
17 DI_SCC DT_CUST_WRD5 DT WRD5 NON_STANDARD
18 DI_SCC DT_CUST_WRD_8 DT 8 NON_STANDARD
19 DI_SCC DT_CUST_WRD23 DT WRD23 NON_STANDARD
预期结果
SNO OWNER OBJECT_NAME BEGINNING ENDING TABLE_CLASSIFICATION
01 DI_SCC DSC_02_CUST_ORD DSC_02 ORD STANDARD
02 DI_SCC DSC_02_CUST_ORD_T DSC_02 T STANDARD
03 DI_SCC DSC_02_CUST_ORD_W DSC_02 W STANDARD
04 DI_SCC DSC_02_CUST_ORD1 DSC_02 ORD1 NON_STANDARD
05 DI_SCC DSC_02_CUST_ORD_4 DSC_02 4 NON_STANDARD
06 DI_SCC DSP_03_CUST_SHP DSP_03 SHP STANDARD
07 DI_SCC DSP_03_CUST_SHP_T DSP_03 T STANDARD
08 DI_SCC DSP_03_CUST_SHP_W DSP_03 W STANDARD
09 DI_SCC DSP_03_CUST_SHP9 DSP_03 SHP9 NON_STANDARD
10 DI_SCC DSP_03_CUST_SHP_62 DSP_03 62 NON_STANDARD
14 DI_SCC DT_CUST_WRD DT WRD STANDARD
15 DI_SCC DT_CUST_WRD_T DT T STANDARD
16 DI_SCC DT_CUST_WRD_W DT W STANDARD
17 DI_SCC DT_CUST_WRD5 DT WRD5 NON_STANDARD
18 DI_SCC DT_CUST_WRD_8 DT 8 NON_STANDARD
19 DI_SCC DT_CUST_WRD23 DT WRD23 NON_STANDARD
我正在尝试纠正它以获得预期的结果,我需要纠正它吗?
WHEN REGEXP_LIKE(OBJECT_NAME, '^D(S[CP]?|T)_.+_([A-Z$])$')
有什么建议在上面的 reg ex 语句中必须修改什么?
--this case statement is for schema - DI_STAGE
WHEN REGEXP_LIKE(OBJECT_NAME, '^D(S[CP]?|T)_.+_(T|(W0?[123]?))$')
--this case statement is for schema - DI_ODS
WHEN REGEXP_LIKE(OBJECT_NAME, '^DB_.+_(D|F|T|W|W1|W2|W3)$')
--this case statement is for schema - DI_EDW
WHEN REGEXP_LIKE(OBJECT_NAME, '^DE_.+_(D|F|L|T|W|W01|W02|W03|W1|W2|W3)$')
--this case statement is for schema - DI_MART
WHEN REGEXP_LIKE(OBJECT_NAME, '^DE_.+_(D|F|L|T|W|W01|W02|W03|W1|W2|W3)$')
'^DA_.+_(D|F|L|T|W|W01|W02|W03|W1|W2|W3|A|AD|AM|AQ|AY)$')
【问题讨论】:
-
请将您的测试用例的数据发布在 DDL(create table) 和 DML(insert) 语句中,以便我们更好地帮助您。另外,请记住发布数据库版本。最后,解释支持所需输出的规则。
-
1)。您在查询 (
'^W(S[CP]?|T)_.+_([A-Z$])$') 和最后的问题 ('^D(S[CP]?|T)_.+_([A-Z$])$') 中的正则表达式不匹配。 2)。你实际上并没有解释你想要正则表达式检查什么逻辑。 -
@LalitKumarB - 这是 DBA_OBJECTS 表,它是通用表,因此结构保持不变,Oracle DB - Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit
-
@MatBailie - 基本上如果表格结尾是数字,那么它必须被归类为 NON_STANDARD
-
@rakesh 1. 即使是元数据表,结构也没有必要保持不变,因为它取决于 Oracle 版本。 2. 我们没有您的数据,因此您必须遵守发布规则。 3. 解释支持你想要的输出的规则。否则,你可能会得到一半的答案,这对你没有帮助。
标签: sql regex oracle regexp-substr regexp-like