我想在Oracle中选择列:基于条件的代码和编号,
如果编号为以下任何一个,则返回"E":###7890001至###7890999
其中#(前3位(可以是任何数字。这些数字被保存为字符串值,所以我也需要将它们转换为适当的数据类型。
返回的数据如下所示:
Code Number
E 2347890001
E 9567890456
E 5647890999
谢谢!!
假设问题描述正确,则输入始终为10位字符串,并且必须返回代码E
,当且仅当中间的四位数字为7890
。正确的如果是这样,最简单的解决方案就是使用LIKE条件。注意,number
是一个保留关键字,所以不能用作列名(我希望你的列名不是真正的number
,是吗?(
LIKE
条件下的字符串很难读取;它由三个下划线字符组成,然后是7890,然后是另外三个下划线。下划线仅代表一个字符(任何字符(。
with
simulated_data (num) as (
select '1234567890' from dual union all
select '3337890456' from dual union all
select '7897890455' from dual union all
select '9998887774' from dual
)
select num, case when num like '___7890___' then 'E' end as code
from simulated_data
order by num
;
NUM CODE
---------- ----
1234567890
3337890456 E
7897890455 E
9998887774
您可以将to_number
与mod
和on conversion error
(oracle 12.2或更高版本(一起使用,如下所示:
Select 'E' as code,
number
From your_table
Where MOD(TO_NUMBER(number DEFAULT -1 ON CONVERSION ERROR), 10000000)
between 7890001 and 7890999;
干杯!!
这应该有效:
where code = 'E' and
substr(number, -7) between '7890001' and '7890999'
编辑:
select (case when substr(number, -7) between '7890001' and '7890999' then 'E' end) as code