从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