Oracle
基於 trim 獲取重複記錄的 SQL 查詢
我有一張桌子,上面有以下記錄。
UNMASK MASK 123 897609 00123 896509 0000456 5632789 456 32567889 5678 5632789
從上表中,我只需要選擇以下記錄。
UNMASK 123 00123 0000456 456
(IE) UNMASK 中的任何值在 ‘1-9’ 之前有任意數量的 ‘0’ 以及在 1-9 之前沒有 0 的行。
像 123 一樣,可以有 000000123、456 和 00456,我需要在 Oracle 中使用 SQL 查詢在輸出中使用這樣的記錄(僅以 0 和原始值為前綴)。
我嘗試了以下查詢,但它沒有按我想要的方式工作。
Select UNMASK,TRIM (LEADING '0' FROM UNMASK) from HSA.TEST_TABLE group by UNMASK having count(TRIM(LEADING '0' FROM UNMASK)) > 1;
測試數據:
create table test_table(unmask varchar(20), mask varchar(20)); insert into test_table values('123', '897609'); insert into test_table values('00123','896509'); insert into test_table values('0000456','5632789'); insert into test_table values('456','32567889'); insert into test_table values('5678','5632789');
我用 CTE 完成了這項工作,因為我愛他們。
cast
將字元串設置為 anumber
會刪除前導字元,我發現這比弄亂TRIM
.詢問:
with duplicates as ( select cast(unmask as number) as unmask_num, count(*) as cnt from test_table group by cast(unmask as number) having count(*)>1 ) select * from duplicates join test_table on duplicates.unmask_num = cast(unmask as number) ;
展示的 DB Fiddle在這裡。