Select 列值长度小于 7 的记录满足条件 - Oracle
Select the records having column value length less than 7 satisfying criteria - Oracle
我有一个包含 NAME 和 CODE 列的 table TABLE1,我有一个包含 NAME、COLUMN1 和 COLUMN2 列的 table TABLE2。我们需要 select 来自 TABLE1 的记录,其 CODE 列值应介于 COLUMN1 和 COLUMN2 列的值之间。
如果CODE值长度大于或等于7那么我们需要检查CODE值的“第七个字符”
a) 如果第七个字符是 D 或 S 则不 select 记录
b) 如果第七个字符不是D或S,则检查CODE列的值是否在TABLE2的COLUMN1和COLUMN2列的值之间,如果是则select记录
如果CODE值长度小于7,那么我们需要检查CODE值是否在COLUMN1和COLUMN2列的值之间。如果是,select 来自 TABLE1 的记录否则不 select
CREATE TABLE TABLE1 (NAME VARCHAR2(6), CODE VARCHAR2(10));
INSERT INTO TABLE1 VALUES ('JOHN', 'K062');
INSERT INTO TABLE1 VALUES ('JEFF', 'K08117');
INSERT INTO TABLE1 VALUES ('KATE', 'K08419');
INSERT INTO TABLE1 VALUES ('KIWI', 'M991011');
INSERT INTO TABLE1 VALUES ('TARA', 'S12312D');
INSERT INTO TABLE1 VALUES ('SOMA', 'T3499XS');
INSERT INTO TABLE1 VALUES ('RAMA', 'Z043');
INSERT INTO TABLE1 VALUES ('GEET', '1234567');
CREATE TABLE TABLE2 (NAME VARCHAR2(6), COLUMN1 VARCHAR2(10), COLUMN2 VARCHAR2(10));
INSERT INTO TABLE2 VALUES ('JOHN', 'K062', 'K062');
INSERT INTO TABLE2 VALUES ('JEFF', 'K08111', 'K08119');
INSERT INTO TABLE2 VALUES ('KATE', 'K08419', 'K08419');
INSERT INTO TABLE2 VALUES ('KIWI', 'M991010', 'M991010');
INSERT INTO TABLE2 VALUES ('TARA', 'S0000XA', 'S99912S');
INSERT INTO TABLE2 VALUES ('SOMA', 'T07', 'T3499XS');
INSERT INTO TABLE2 VALUES ('RAMA', 'Z041', 'Z043');
INSERT INTO TABLE2 VALUES ('GEET', '1234567', '1234567');
这是我写的查询,
SELECT T1.NAME, T1.CODE
FROM TABLE1 T1
JOIN TABLE2 T2 ON T1.NAME = T2.NAME
WHERE SUBSTR(T1.CODE,7,1) NOT IN ('D', 'S')
AND T1.CODE BETWEEN T2.COLUMN1 AND T2.COLUMN2;
如果我在上面查询,我得到的是其他结果,得到下面结果的查询是什么?
我得到的结果:
NAME CODE
-----------------
GEET 1234567
结果需要是:
NAME CODE
--------------------
JOHN K062
JEFF K08117
KATE K08419
RAMA Z043
GEET 1234567
对于代码少于 7 个字符的行,substr
将 return 为空。这导致这些被排除在结果之外。
要包含它们,请进行空检查:
SELECT T1.NAME, T1.CODE
FROM TABLE1 T1
JOIN TABLE2 T2 ON T1.NAME = T2.NAME
WHERE (
SUBSTR(T1.CODE,7,1) NOT IN ('D', 'S') OR
SUBSTR(T1.CODE,7,1) IS NULL
)
AND T1.CODE BETWEEN T2.COLUMN1 AND T2.COLUMN2;
NAME CODE
JOHN K062
JEFF K08117
KATE K08419
RAMA Z043
GEET 1234567
我有一个包含 NAME 和 CODE 列的 table TABLE1,我有一个包含 NAME、COLUMN1 和 COLUMN2 列的 table TABLE2。我们需要 select 来自 TABLE1 的记录,其 CODE 列值应介于 COLUMN1 和 COLUMN2 列的值之间。
如果CODE值长度大于或等于7那么我们需要检查CODE值的“第七个字符”
a) 如果第七个字符是 D 或 S 则不 select 记录
b) 如果第七个字符不是D或S,则检查CODE列的值是否在TABLE2的COLUMN1和COLUMN2列的值之间,如果是则select记录
如果CODE值长度小于7,那么我们需要检查CODE值是否在COLUMN1和COLUMN2列的值之间。如果是,select 来自 TABLE1 的记录否则不 select
CREATE TABLE TABLE1 (NAME VARCHAR2(6), CODE VARCHAR2(10));
INSERT INTO TABLE1 VALUES ('JOHN', 'K062');
INSERT INTO TABLE1 VALUES ('JEFF', 'K08117');
INSERT INTO TABLE1 VALUES ('KATE', 'K08419');
INSERT INTO TABLE1 VALUES ('KIWI', 'M991011');
INSERT INTO TABLE1 VALUES ('TARA', 'S12312D');
INSERT INTO TABLE1 VALUES ('SOMA', 'T3499XS');
INSERT INTO TABLE1 VALUES ('RAMA', 'Z043');
INSERT INTO TABLE1 VALUES ('GEET', '1234567');
CREATE TABLE TABLE2 (NAME VARCHAR2(6), COLUMN1 VARCHAR2(10), COLUMN2 VARCHAR2(10));
INSERT INTO TABLE2 VALUES ('JOHN', 'K062', 'K062');
INSERT INTO TABLE2 VALUES ('JEFF', 'K08111', 'K08119');
INSERT INTO TABLE2 VALUES ('KATE', 'K08419', 'K08419');
INSERT INTO TABLE2 VALUES ('KIWI', 'M991010', 'M991010');
INSERT INTO TABLE2 VALUES ('TARA', 'S0000XA', 'S99912S');
INSERT INTO TABLE2 VALUES ('SOMA', 'T07', 'T3499XS');
INSERT INTO TABLE2 VALUES ('RAMA', 'Z041', 'Z043');
INSERT INTO TABLE2 VALUES ('GEET', '1234567', '1234567');
这是我写的查询,
SELECT T1.NAME, T1.CODE
FROM TABLE1 T1
JOIN TABLE2 T2 ON T1.NAME = T2.NAME
WHERE SUBSTR(T1.CODE,7,1) NOT IN ('D', 'S')
AND T1.CODE BETWEEN T2.COLUMN1 AND T2.COLUMN2;
如果我在上面查询,我得到的是其他结果,得到下面结果的查询是什么?
我得到的结果:
NAME CODE
-----------------
GEET 1234567
结果需要是:
NAME CODE
--------------------
JOHN K062
JEFF K08117
KATE K08419
RAMA Z043
GEET 1234567
对于代码少于 7 个字符的行,substr
将 return 为空。这导致这些被排除在结果之外。
要包含它们,请进行空检查:
SELECT T1.NAME, T1.CODE
FROM TABLE1 T1
JOIN TABLE2 T2 ON T1.NAME = T2.NAME
WHERE (
SUBSTR(T1.CODE,7,1) NOT IN ('D', 'S') OR
SUBSTR(T1.CODE,7,1) IS NULL
)
AND T1.CODE BETWEEN T2.COLUMN1 AND T2.COLUMN2;
NAME CODE
JOHN K062
JEFF K08117
KATE K08419
RAMA Z043
GEET 1234567