【问题标题】:MySQL function to replace text keeping the case intactMySQL函数替换文本保持大小写不变
【发布时间】:2012-09-29 09:04:12
【问题描述】:

要求是根据美国英语词典替换列值中区分大小写的文本

以下是示例

Colour => color
Color => Color (note that C is capitalized here)

FIBRE => FIBER

Colour/Monochrome => Color/Monochrome

【问题讨论】:

  • 假设您已经有一个表格可以从中挑选单词,到目前为止您尝试过什么?
  • 是的,但它正在替换而不是保留案例

标签: mysql


【解决方案1】:

试试这个:

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 种情况 - 输入字符串是不是

  • 小写
  • 大写
  • 首字母大写

但它应该适用于这三种情况 - 即

纤维 => 纤维

纤维 => 纤维

纤维 => 纤维

【讨论】:

    【解决方案2】:

    这个功能声称可以工作,虽然我没有检查但在another question用户接受了这个作为答案

    http://pento.net/2009/02/15/case-insensitive-replace-for-mysql/

    如果这不起作用,请告诉我

    【讨论】:

    • 功能在更换方面有效,但不保留案例
    • 功能在替换方面起作用,但它不保留例如的情况。颜色=>颜色。我有一本要替换的字典。如果 Color 发现它替换为颜色,则替换功能完美但大小写错误
    • 功能在替换方面起作用,但它不保留例如的情况。颜色=>颜色。我有一本要替换的字典。如果 Color 发现它替换为颜色,则替换功能完美但大小写错误
    猜你喜欢
    • 2011-06-26
    • 2022-01-16
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 2013-10-31
    • 1970-01-01
    相关资源
    最近更新 更多