SQL中某个范围的数字模式匹配



我想在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_numbermodon 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

最新更新