在mysql中删除非字母数字

eivgtgni  于 2021-06-15  发布在  Mysql
关注(0)|答案(5)|浏览(295)

您知道有什么简单的方法可以从mysql的varchar变量中删除(或替换)所有非字母数字字符吗?
类似于java中string的replaceall(“[^a-za-z0-9],”i“)(”i“是我的特殊字符,但“”也可以)

zrfyljdw

zrfyljdw1#

我将对每个字符串使用类似的内容(我用“o”替换每个坏字符):

CREATE FUNCTION removeNonAlphaNum (p_zthes VARCHAR(255)) RETURNS VARCHAR(255)
BEGIN
DECLARE v_i INTEGER;
DECLARE v_char VARCHAR(1);
DECLARE v_res VARCHAR(255);
SET v_i := LENGTH(p_zthes);
SET v_res:=p_zthes;
WHILE v_i > 0 DO
    SET v_char := SUBSTRING(p_zthes, v_i, 1);
    IF (SELECT v_char REGEXP '[^a-zA-Z0-9]') THEN
      SET v_res := REPLACE(v_res, v_char, 'O');
    END IF;
    SET v_i := v_i - 1;
  END WHILE;
return v_res;
END

但我想我可以避免这样的怪物(在字符串中迭代字符并根据regex检查每个字符。。。bleeeeeee…:-/我还需要测试一下。
有没有更性感的解决方案?

gtlvzcf8

gtlvzcf82#

对于mssql,我承诺如下:

CREATE FUNCTION removeNonAlphaNum(@p_zthes VARCHAR(255)) 
RETURNS varchar(255) 
AS
BEGIN
DECLARE @v_bad_char_index INT;
DECLARE @v_bad_char VARCHAR(1);
DECLARE @v_res VARCHAR(255);
SET @v_res = @p_zthes;
SET @v_bad_char_index = patindex('%[^a-zA-Z0-9]%', @p_zthes) 
WHILE (@v_bad_char_index > 0)
  BEGIN
    SET @v_bad_char = SUBSTRING(@p_zthes, @v_bad_char_index, 1);
    SET @v_res = REPLACE(@v_res, @v_bad_char, 'O');
    SET @v_bad_char_index = patindex('%[^a-zA-Z0-9]%', @v_res ) 
  END
return @v_res;
END

(但我是个差劲的sql程序员,所以可能有更好的解决方案)

hl0ma9xz

hl0ma9xz3#

这是sql server中的解决方案。但是这个概念就像我创建了一个数字表,拆分了字符,然后将它们与正则表达式进行匹配。
希望同样的概念可以在mysql中描述,稍加改变,希望你能做到。

declare @str varchar(50)
    set @str = '1ab3^45)(*%'

    declare @NumberTable table(id int)
    insert into @NumberTable(id) values(1)
    insert into @NumberTable(id) values(2)
    insert into @NumberTable(id) values(3)
    insert into @NumberTable(id) values(4)
    insert into @NumberTable(id) values(5)
    insert into @NumberTable(id) values(6)
    insert into @NumberTable(id) values(7)
    insert into @NumberTable(id) values(8)
    insert into @NumberTable(id) values(9)
    insert into @NumberTable(id) values(10)
    insert into @NumberTable(id) values(11)
    insert into @NumberTable(id) values(12)

    select NonAlphaChars = SUBSTRING(@str,id,1) from @NumberTable
    where SUBSTRING(@str,id,1) like '%[^a-z0-9]'

非阿尔法哈尔

^
)
(

* 

%
rdrgkggo

rdrgkggo4#

根据regexbuddy的文档,mysql似乎没有提供此功能(与postgresql不同):
mysql对正则表达式的支持相当有限,但仍然非常有用。mysql只有一个操作符允许您使用正则表达式。这是regexp运算符,它的工作方式与like运算符类似,只是它使用了posix扩展正则表达式(ere),而不是使用\u和%通配符。

x6yk4ghg

x6yk4ghg5#

由于mysql 8.0,您可以使用正则表达式从变量中删除非字母数字字符。有方法regexp\u replace

SELECT REGEXP_REPLACE(@variable, '[^0-9a-zA-Z ]', '')

或者

SET @variable = REGEXP_REPLACE(@variable, '[^0-9a-zA-Z ]', '')

相关问题