我的问题是关于一个名为contract_nm varchar2(14)的字段.我需要从中获取3个不同的值,使用该字段来获取where子句的过滤器.
以下是样本数据以及数据的长度,可以是9或10或11,现在也不多.
CONTRACT_NM LENGTH(CONTRACT_NM)
F.US.WZ10 9
F.US.WZ11 9
F.US.WZ12 9
F.US.RBZ10 10
F.US.RBZ11 10
F.US.RBZ12 10
F.US.ZWAZ10 11
F.US.ZWAZ11 11
F.US.ZWAZ12 11
etc
Run Code Online (Sandbox Code Playgroud)
1)我需要显示contract_nm的最后3个字符.
2)检查contract_nm的最后3个字符,看看第一个字母是否是下面的字母之一,然后是MONTH,YEAR将是接下来的2个字母,DAY将默认为该月的第一天.我需要显示日期,因为它进入日期字段.
Trade Months (Terms):
F January
G February
H March
J April
K May
M June
N July
Q August
U September
V October
X November
Z December
Run Code Online (Sandbox Code Playgroud)
3)这有点难以用书面解释,我会尽力希望你理解我!读取contract_nm数据,忽略前五个字符(F.US.),然后忽略最后3个字符,即Z11.现在,我们正在使用的是中间的1个字符(9个长度)或2个字符(10个长度)或3个字符(11个长度)的数据,总是看到下面的数据.如果是1个字符,则显示该字母,否则显示2个字符,然后检查第2个字母,如果不是"E"或"A"或"T",则显示两个字母,否则只显示第一个字母.否则如果是3个字符,则显示前2个字母.
4)我需要一个过滤器,我的where子句读取contract_nm数据,忽略前五个字符(F.US.),然后忽略最后3个字符,即Z11.现在,我们正在使用的是中间的1个字符(9个长度)或2个字符(10个长度)或3个字符(11个长度)的数据,总是看到下面的数据.如果是2个字符,则检查第二个字母,如果不是'E'或'T',则不要拉数据,否则执行.否则如果是3个字符,则检查第3个字母,如果不是'E'或'T',则不要拉数据,否则执行.
请尝试以下方法:
问题1:
contract_nm_month_year := substr(contract_nm, -3);
Run Code Online (Sandbox Code Playgroud)
问题2:
contract_date := CASE substr(contract_nm, -3, 1)
WHEN 'F' THEN TO_DATE('01-JAN-' || SUBSTR(contract_nm, -2), 'DD-MON-RR');
WHEN 'G' THEN TO_DATE('01-FEB-' || SUBSTR(contract_nm, -2), 'DD-MON-RR');
WHEN 'H' THEN TO_DATE('01-MAR-' || SUBSTR(contract_nm, -2), 'DD-MON-RR');
WHEN 'J' THEN TO_DATE('01-APR-' || SUBSTR(contract_nm, -2), 'DD-MON-RR');
WHEN 'K' THEN TO_DATE('01-MAY-' || SUBSTR(contract_nm, -2), 'DD-MON-RR');
WHEN 'M' THEN TO_DATE('01-JUN-' || SUBSTR(contract_nm, -2), 'DD-MON-RR');
WHEN 'N' THEN TO_DATE('01-JUL-' || SUBSTR(contract_nm, -2), 'DD-MON-RR');
WHEN 'Q' THEN TO_DATE('01-AUG-' || SUBSTR(contract_nm, -2), 'DD-MON-RR');
WHEN 'U' THEN TO_DATE('01-SEP-' || SUBSTR(contract_nm, -2), 'DD-MON-RR');
WHEN 'V' THEN TO_DATE('01-OCT-' || SUBSTR(contract_nm, -2), 'DD-MON-RR');
WHEN 'X' THEN TO_DATE('01-NOV-' || SUBSTR(contract_nm, -2), 'DD-MON-RR');
WHEN 'Z' THEN TO_DATE('01-DEC-' || SUBSTR(contract_nm, -2), 'DD-MON-RR');
ELSE NULL;
END;
Run Code Online (Sandbox Code Playgroud)
问题3:
display_3 := CASE length(contract_nm)
WHEN 9 THEN SUBSTR(contract_nm, 6, 1);
WHEN 10 THEN
CASE SUBSTR(contract_nm, 7, 1)
WHEN 'E' THEN SUBSTR(contract_nm, 6, 1);
WHEN 'A' THEN SUBSTR(contract_nm, 6, 1);
WHEN 'T' THEN SUBSTR(contract_nm, 6, 1);
ELSE SUBSTR(contract_nm, 6, 2);
END;
WHEN 11 THEN SUBSTR(contract_nm, 6, 2)
END;
Run Code Online (Sandbox Code Playgroud)
问题4:
WHERE CASE length(contract_nm)
WHEN 9 THEN 0 -- never pull data for contract length = 9
WHEN 10 THEN
CASE SUBSTR(contract_nm, 7, 1)
WHEN 'E' THEN 1
WHEN 'T' THEN 1
ELSE 0
END
WHEN 11 THEN
CASE SUBSTR(contract_nm, 8, 10
WHEN 'E' THEN 1
WHEN 'T' THEN 1
ELSE 0
END
ELSE 0
END = 1;
Run Code Online (Sandbox Code Playgroud)
分享和享受.
| 归档时间: |
|
| 查看次数: |
6973 次 |
| 最近记录: |