Sql 如何选择字符串数据并排除包含零的数据
我有一个名为Sql 如何选择字符串数据并排除包含零的数据,sql,oracle,Sql,Oracle,我有一个名为ElectronicAddress的表,如下所示,还有一个字符串类型的列Phone Id Name Phone -------------------------- 1 Adele 23432434 2 Diana 0000 3 Whale 0000000 4 Sion 936 5 Aria wwqq 6 Dave 665332 7 Daisy
ElectronicAddress
的表,如下所示,还有一个字符串类型的列Phone
Id Name Phone
--------------------------
1 Adele 23432434
2 Diana 0000
3 Whale 0000000
4 Sion 936
5 Aria wwqq
6 Dave 665332
7 Daisy dai567
我想选择Phone
,它是仅排除零个字符,仅排除字符,并且必须有>5个字符
我试图得到的结果是:
Id Name Phone
--------------------------
1 Adele 23432434
6 Dave 665332
7 Daisy dai567
我已经试过了:
从电子地址中选择*,其中手机不喜欢“[[:alpha:]-]”和长度(修剪(手机))>5
但是我很难排除包含零值的数据。您所说的“排除0”似乎是指“排除仅由零组成的字符串”,而不是排除
'0'
(正如我最初解释的那样)。这一部分很难合并到单个正则表达式中,因此可以使用单独的逻辑
我想你只需要数字:
where regexp_like(phone, '^[0-9]{5,}$') and replace(phone, '0', '') is not null
或:
或:
也可以在一个正则表达式中执行此操作。我不确定是否有更干净的方法。以下是暴力,在前五个位置中的任意位置查找非零数字:
where regexp_like(phone, '^[1-9][0-9]{4,}$|^[0-9]{1}[1-9][0-9]{3,}$|^[0-9]{2}[1-9][0-9]{2,}$|^[0-9]{3}[1-9][0-9]{1,}$|^[0-9]{4}[1-9][0-9]*$')
是一个数据小提琴。SELECT*
从你的桌子上
其中长度(电话)>5
并替换(电话,'0','')
和长度(修剪(翻译(电话,'+-.0123456789','')=0
在WHERE子句中应用3个条件:
select * from ElectronicAddress
where
regexp_like("Phone", '[[:digit:]]')
and length("Phone") > 5
and replace("Phone", '0', '') is not null
Oracle将空字符串视为null
s,这就是为什么需要不为null
请参阅。
结果:
是否仍需要删除所有0的行?是。我只需要大于5个字符和字母数字的数据。@EdmundXavier。“排除0”是什么意思?排除数据包含零值
where regexp_like(phone, '^[1-9][0-9]{4,}$|^[0-9]{1}[1-9][0-9]{3,}$|^[0-9]{2}[1-9][0-9]{2,}$|^[0-9]{3}[1-9][0-9]{1,}$|^[0-9]{4}[1-9][0-9]*$')
SELECT *
FROM Yourtable
WHERE length (phone) > 5
and REPLACE(Phone, '0', '') <> ''
and LENGTH(TRIM(TRANSLATE(Phone, ' +-.0123456789', ' '))) = 0
select * from ElectronicAddress
where
regexp_like("Phone", '[[:digit:]]')
and length("Phone") > 5
and replace("Phone", '0', '') is not null
> Id | Name | Phone
> -: | :---- | :-------
> 1 | Adele | 23432434
> 6 | Dave | 665332
> 7 | Daisy | Dai567