Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何选择字符串数据并排除包含零的数据_Sql_Oracle - Fatal编程技术网

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