varchar
mysqlテーブルに特殊文字を含むフィールドがあります。MYSQL QUERYを使用して、その文字列内のすべての特殊文字を削除したいと思います。
質問する
20936 次
4 に答える
2
MySQL はそのようなクエリをサポートしていません。MySQL クエリ内でのベスト ショットは、次のようなものです。
update TABLENAME
set FIELDNAME = replace(FIELDNAME,'_','')
于 2012-09-29T11:36:17.877 に答える
2
以下の機能を使用できます
DROP FUNCTION IF EXISTS `stripSpeciaChars`;
DELIMITER ;;
CREATE FUNCTION `stripSpeciaChars`(`dirty_string` varchar(2048),allow_space TINYINT,allow_number TINYINT,allow_alphabets TINYINT,no_trim TINYINT) RETURNS varchar(2048) CHARSET utf8
BEGIN
/**
* MySQL function to remove Special characters, Non-ASCII,hidden characters leads to spaces, accents etc
* Downloaded from http://DevZone.co.in
* @param VARCHAR dirty_string : dirty string as input
* @param VARCHAR allow_space : allow spaces between string in output; takes 0-1 as parameter
* @param VARCHAR allow_number : allow numbers in output; takes 0-1 as parameter
* @param VARCHAR allow_alphabets : allow alphabets in output; takes 0-1 as parameter
* @param VARCHAR no_trim : don't trim the output; takes 0-1 as parameter
* @return VARCHAR clean_string : clean string as output
*
* Usage Syntax: stripSpeciaChars(string,allow_space,allow_number,allow_alphabets,no_trim);
* Usage SQL> SELECT stripSpeciaChars("sdfa7987*&^&*ÂÃ ÄÅÆÇÈÉÊ sd sdfgËÌÍÎÏÑ ÒÓÔÕÖØÙÚàáâã sdkarkhru",0,0,1,0);
* result : sdfasdsdfgsdkarkhru
*/
DECLARE clean_string VARCHAR(2048) DEFAULT '';
DECLARE c VARCHAR(2048) DEFAULT '';
DECLARE counter INT DEFAULT 1;
DECLARE has_space TINYINT DEFAULT 0; -- let spaces in result string
DECLARE chk_cse TINYINT DEFAULT 0;
DECLARE adv_trim TINYINT DEFAULT 1; -- trim extra spaces along with hidden characters, new line characters etc.
if allow_number=0 and allow_alphabets=0 then
RETURN NULL;
elseif allow_number=1 and allow_alphabets=0 then
set chk_cse =1;
elseif allow_number=0 and allow_alphabets=1 then
set chk_cse =2;
end if;
if allow_space=1 then
set has_space =1;
end if;
if no_trim=1 then
set adv_trim =0;
end if;
IF ISNULL(dirty_string) THEN
RETURN NULL;
ELSE
CASE chk_cse
WHEN 1 THEN
-- return only Numbers in result
WHILE counter <= LENGTH(dirty_string) DO
SET c = MID(dirty_string, counter, 1);
IF ASCII(c) = 32 OR ASCII(c) >= 48 AND ASCII(c) <= 57 THEN
SET clean_string = CONCAT(clean_string, c);
END IF;
SET counter = counter + 1;
END WHILE;
WHEN 2 THEN
-- return only Alphabets in result
WHILE counter <= LENGTH(dirty_string) DO
SET c = MID(dirty_string, counter, 1);
IF ASCII(c) = 32 OR ASCII(c) >= 65 AND ASCII(c) <= 90 OR ASCII(c) >= 97 AND ASCII(c) <= 122 THEN
SET clean_string = CONCAT(clean_string, c);
END IF;
SET counter = counter + 1;
END WHILE;
ELSE
-- return numbers and Alphabets in result
WHILE counter <= LENGTH(dirty_string) DO
SET c = MID(dirty_string, counter, 1);
IF ASCII(c) = 32 OR ASCII(c) >= 48 AND ASCII(c) <= 57 OR ASCII(c) >= 65 AND ASCII(c) <= 90 OR ASCII(c) >= 97 AND ASCII(c) <= 122 THEN
SET clean_string = CONCAT(clean_string, c);
END IF;
SET counter = counter + 1;
END WHILE;
END CASE;
END IF;
-- remove spaces from result
if has_space=0 then
SET clean_string =REPLACE(clean_string,' ','');
end if;
-- remove extra spaces, newline,tabs. from result
if adv_trim=1 then
SET clean_string =TRIM(Replace(Replace(Replace(clean_string,'\t',''),'\n',''),'\r',''));
end if;
RETURN clean_string;
END
;;
DELIMITER ;
SELECT stripSpeciaChars("foo79ÒÓÔÕÖØÙÚàáâã 87*&bÄÅÆÇÈÉÊar",1,0,1,1); -- result foo bar
于 2015-03-30T15:36:40.257 に答える
1
使用する
update table_name set field_name = REPLACE(field_name,'/','')
于 2012-09-29T11:31:19.907 に答える
0
以下の文字を置き換えます
~ ! @ # $ % ^ & * ( ) _ +
` - =
{ } |
[ ] \
: "
; '
< > ?
, .
このSQLで
SELECT note as note_original,
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(note, '"', ''),
'.', ''),
'?', ''),
'`', ''),
'<', ''),
'=', ''),
'{', ''),
'}', ''),
'[', ''),
']', ''),
'|', ''),
'\'', ''),
':', ''),
';', ''),
'~', ''),
'!', ''),
'@', ''),
'#', ''),
'$', ''),
'%', ''),
'^', ''),
'&', ''),
'*', ''),
'_', ''),
'+', ''),
',', ''),
'/', ''),
'(', ''),
')', ''),
'-', ''),
'>', ''),
' ', '-'),
'--', '-') as note_changed FROM invheader
于 2015-02-11T08:43:15.783 に答える