Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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
从mysql select语句中的结果中删除字母字符_Mysql - Fatal编程技术网

从mysql select语句中的结果中删除字母字符

从mysql select语句中的结果中删除字母字符,mysql,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没有一个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

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

看起来您要删除的字符不止是“字母”字符;还有一个
@
字符也被删除。这就提出了一个问题,您希望如何处理可能出现在字符串中的其他字符,如空格、制表符、分号、句点和一堆其他字符。我们不能从这个问题上判断

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

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

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

但是,无论您以何种方式对其进行切片,执行此操作的本机SQL都不是很好

如果字符串中的最大字符数受到限制,如10个字符(示例数据中最长的字符串)。我会把字符串切碎成十个单独的字符,然后看看每个字符是否都是我们想要返回的字符

作为第一步,将字符串切分为各个字符并将它们重新连接在一起:

 SELECT CONCAT( SUBSTR(foo,1,1) 
              , SUBSTR(foo,2,1) 
              , SUBSTR(foo,3,1) 
              , ...
              , SUBSTR(foo,10,1)
       ) AS foo
(这不会删除任何字符,这只是演示一个模式。展开该模式,添加对每个字符的检查,返回字符(如果它是我们想要保留的字符)或空字符串(对于我们不想要保留的字符)

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

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

此查询是用于将数据提取到新字段还是用于实时搜索?使用SQL实时清理数据很少是一个好主意。虽然(即使原始问题是相反的问题)似乎有答案将数据提取到新字段
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