您是否知道在Mysql中從varchar變量中刪除(或替換)所有非字母數字字符的簡便方法?刪除MySQL中的非alpha數字字符
像字符串的的replaceAll( 「[^ A-ZA-Z0-9]」, 「I」)在Java中( '我' 是我的特殊字符 「」 是也不錯)
您是否知道在Mysql中從varchar變量中刪除(或替換)所有非字母數字字符的簡便方法?刪除MySQL中的非alpha數字字符
像字符串的的replaceAll( 「[^ A-ZA-Z0-9]」, 「I」)在Java中( '我' 是我的特殊字符 「」 是也不錯)
看樣子根據RegexBuddy的文檔,MySQL不提供此功能(與PostgreSQL不同):
MySQL對正則表達式的支持相當有限,但仍然非常有用。 MySQL只有一個運算符,它允許你使用正則表達式。這是REGEXP運算符,其工作方式與LIKE運算符相似,不同之處在於它不使用_和%通配符,而是使用POSIX擴展正則表達式(ERE)。
我要使用事端這樣對於每個字串(我替換每個壞字符與「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
但我想我會避免這樣的怪物(遍歷字符的字符串,並檢查每個反對正則表達式... bleeeeee ...): - /我仍然需要測試它。
還有沒有更多的性感解決方案?
這是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]'
NonAlphaChars
^
)
(
*
%
嗯,它是以某種方式更好(更快),然後遍歷一個字符串? – 2009-12-01 13:52:15
對於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程序員差,所以有可能存在一些更好的解決方案)
在將字符串傳遞給mysql之前用'「」替換'\ W' – Amarghosh 2009-11-25 13:03:36
這些字符串已經在db :(...並且其中有無數... – 2009-11-25 13:22:18