当我选择
时,我确实有输出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
答案 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