要求是基於美國英語詞典中的列值替換區分大小寫的文本MySQL的函數替換文本保持不變的情況下
下面是
Colour => color
Color => Color (note that C is capitalized here)
FIBRE => FIBER
Colour/Monochrome => Color/Monochrome
要求是基於美國英語詞典中的列值替換區分大小寫的文本MySQL的函數替換文本保持不變的情況下
下面是
Colour => color
Color => Color (note that C is capitalized here)
FIBRE => FIBER
Colour/Monochrome => Color/Monochrome
此功能聲稱工作的樣品,雖然我沒有選中,但在another question用戶接受了這個答案爲
http://pento.net/2009/02/15/case-insensitive-replace-for-mysql/
讓我硝酸鉀◆如果這是行不通的
功能在替換方面起作用,但不保留案例 –
功能在替換方面起作用,但它不保留例如。顏色=>顏色。我有一本我替換的字典。如果Color發現它被替換爲顏色,則替換功能完好但情況有誤 –
是否有任何其他解決方案? –
試試這個:
DELIMITER $$
DROP FUNCTION IF EXISTS `replace_ci`$$
CREATE FUNCTION `replace_ci` (str TEXT, needle CHAR(255), str_rep CHAR(255))
RETURNS TEXT
DETERMINISTIC
BEGIN
DECLARE return_str TEXT DEFAULT '';
DECLARE lower_str TEXT;
DECLARE lower_needle TEXT;
DECLARE pos INT DEFAULT 1;
DECLARE old_pos INT DEFAULT 1;
SELECT lower(str) INTO lower_str;
SELECT lower(needle) INTO lower_needle;
SELECT locate(lower_needle, lower_str, pos) INTO pos;
WHILE pos > 0 DO
SELECT concat(return_str, substr(str, old_pos, pos-old_pos), str_rep) INTO return_str;
SELECT pos + char_length(needle) INTO pos;
SELECT pos INTO old_pos;
SELECT locate(lower_needle, lower_str, pos) INTO pos;
END WHILE;
SELECT concat(return_str, substr(str, old_pos, char_length(str))) INTO return_str;
/** mirror the case **/
IF (BINARY LEFT(str,1) = LOWER(LEFT(str,1))) THEN
SET return_str = LOWER(return_str);
ELSE
IF (BINARY LEFT(str,2) = UPPER(LEFT(str,2))) THEN
SET return_str = UPPER(return_str);
ELSE
SET return_str = CONCAT(UPPER(LEFT(return_str,1)), LOWER(RIGHT(return_str, LENGTH(return_str) - 1)));
END IF;
END IF;
RETURN return_str;
END$$
DELIMITER ;
我已經修改了不區分大小寫的替換功能(這是在對方的回答中提到),以「鏡子」原始字符串
的情況下,(請參閱/ **鏡像後的代碼段** /)。
然而,只有3個場景檢查 - 輸入字符串要麼
但它應該爲這三個場景中工作 - 即
FIBER => FIBER
纖維=>纖維
纖維=>纖維
會假設你已經有一個表,從挑的話,看你嘗試過到現在? – Anshu
是的,但它正在取代但不保留案例 –