sql - 使用正则表达式数据拆分的查询没有得到正确的结果oracle SQL
问题描述
我正在尝试将表格分类为各种类别,但我无法获得所需的结果,请检查以下查询结果、现有结果以及预期结果
标准
非标准
暂时的
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)$')
解决方案
如果您真的只需要检查字符串是否以数值结尾(根据您的评论) ...
https://dbfiddle.uk/?rdbms=oracle_18&fiddle=66a0e1d6180f3eb1c3b80c06763e8654
CASE WHEN NOT REGEXP_LIKE(OBJECTNAME, '[0-9]+$') THEN 'STANDARD' ELSE 'OTHER' END
编辑:
您在下面的评论暗示如果表名不以DSC_
,DSP_
或开头DT_
,那么结果应该是NONSTANDARD
。检查是否存在的最简单方法是(DSC|DSP|DT)\_
这给了我...
CASE WHEN REGEXP_LIKE(OBJECTNAME, '^(DSP|DSC|DT)\_(.)*[A-Z]$') THEN 'STANDARD' ELSE 'OTHER' END
要成为STANDARD
,以下所有条件都必须为真
- 必须以
DSC_
,DSP_
或DT_
- 必须以大写字母结尾
在您的问题通过更完整和更准确的要求得到澄清之前,这只是我对您要达到的目标的最佳猜测。
https://dbfiddle.uk/?rdbms=oracle_18&fiddle=56bdf881655ec8cd3292931303b86ea1
编辑:
我最终和你的例子之间的主要区别是你$
在那里有两次......
([A-Z$])$
因此,需要两个“行尾”。
将其更改为[A-Z]$
它与我的大致相同。
推荐阅读
- reference - 如何从 BlueprintImplementableEvent 返回引用?
- url - 摆脱远程页面上的“您确定要离开此页面”
- r - R Dataframe Factor转换为数字问题
- php - 按 Laravel 中的最高 ID 排序?
- javascript - Vscode 扩展使用函数外的变量
- blob - 如何使用 blobs 或 dataURL 作为 360photos 的 a-frame 或 a-sky 的 src
- excel - 循环填充单独的电子邮件在同一电子邮件中生成电子邮件
- html - 尝试显示图像“已阻止:其他”时出现以下错误
- spring-boot - Spring Security OAuth + Spring Boot 2
- json - ReactJS:如何解决映射多个对象数组