从mysql select语句中删除字母字符

时间:2016-03-21 14:01:20

标签: mysql

当我选择

时,我确实有输出
select * from testing

 123varc    
 123@etets
 123@ppp.c
 470rt!dd
 45sd3
 tt123rc
 123@ppp.c
 470rt!dd
 45sd3
 tt123rc

如何在mysql中编写查询,以便删除所有字母字符并显示结果。

我的意思是说结果将是

 123    
 123
 123
 470
 453
 123
 123
 470
 453
 123

非常感谢 SKP

1 个答案:

答案 0 :(得分:1)

没有单一的MySQL内置函数可以完成字符串操作。

看起来您想要删除多个“字母”字符;还有一个@字符也被删除了。它提出了一个问题,你想对可能出现在字符串中的其他字符做什么,比如空格,制表符,分号,句号和一大堆其他字符。我们无法从这个问题中得知。

但看起来你真正想要的只是“保留”数字数字字符,0直到9

为了保持SQL简单(隐藏复杂性),我们可以编写MySQL函数 (存储程序)返回一个字符串。然后在SQL中引用该函数。

这有一些缺点。另一个数据库对象,使用该函数的SQL不能移植到另一个数据库(也没有实现该功能)。

但是无论你采用哪种方式对它进行切片,原生SQL都不是很好。

如果字符串中的最大字符数受限制,则为十个字符(示例数据中最长的字符串)。我将字符串分成十个单独的字符,然后查看每个字符是否是我们想要返回的字符。

作为第一步,将字符串切割成单个字符并将它们连接在一起:

 SELECT CONCAT( SUBSTR(foo,1,1) 
              , SUBSTR(foo,2,1) 
              , SUBSTR(foo,3,1) 
              , ...
              , SUBSTR(foo,10,1)
       ) AS foo

(这不会删除任何字符,这只是说明一个模式。扩展该模式,添加对每个字符的检查,返回字符(如果它是我们要保留的字符),或者为空string(对于我们不想保留的字符。)

SELECT CONCAT( IF( INSTR('1234567890',SUBSTR(foo,1,1)), SUBSTR(foo,1,1), '')
             , IF( INSTR('1234567890',SUBSTR(foo,2,1)), SUBSTR(foo,2,1), '')
             , IF( INSTR('1234567890',SUBSTR(foo,3,1)), SUBSTR(foo,3,1), '')
             , ...
             , IF( INSTR('1234567890',SUBSTR(foo,10,1)), SUBSTR(foo,10,1), '')
       ) AS bar

当然,如果目标是识别要删除的字符,并保留其他所有内容,则可以交换它...如果字符匹配则返回空字符串,否则返回字符。

SELECT CONCAT( IF( INSTR('@#$abc',SUBSTR(foo,1,1)), '', SUBSTR(foo,1,1))
             , IF( INSTR('@#$abc',SUBSTR(foo,2,1)), '', SUBSTR(foo,2,1))
             , IF( INSTR('@#$abc',SUBSTR(foo,3,1)), '', SUBSTR(foo,3,1))
             , ...
             , IF( INSTR('@#$abc',SUBSTR(foo,10,1)), '', SUBSTR(foo,10,1)) 
       ) AS rab