在MySQL中是否支持大小写不敏感的REPLACE?

14 浏览
0 Comments

在MySQL中是否支持大小写不敏感的REPLACE?

MySQL在默认排序规则下基本上会对所有字符串比较进行处理...除了REPLACE命令。我有一个不区分大小写的排序规则,并且需要运行一个不区分大小写的REPLACE。有没有办法强制REPLACE使用当前的排序规则,而不是总是进行区分大小写的比较?我愿意升级我的MySQL(目前运行的是5.1版本)以获得额外的功能...

0
0 Comments

MySQL中的REPLACE函数是大小写敏感的,这可能会导致在替换字符串时出现问题。为了解决这个问题,可以使用一个自定义的函数case_insensitive_replace来实现不区分大小写的替换。

下面是case_insensitive_replace函数的定义和实现:

DELIMITER |
CREATE FUNCTION case_insensitive_replace ( REPLACE_WHERE text, REPLACE_THIS text, REPLACE_WITH text )
RETURNS text
DETERMINISTIC 
BEGIN
    DECLARE last_occurency int DEFAULT '1';
    IF LCASE(REPLACE_THIS) = LCASE(REPLACE_WITH) OR LENGTH(REPLACE_THIS) < 1 THEN
         RETURN REPLACE_WHERE;
    END IF;
    WHILE Locate( LCASE(REPLACE_THIS), LCASE(REPLACE_WHERE), last_occurency ) > 0  DO
      BEGIN
        SET last_occurency = Locate(LCASE(REPLACE_THIS), LCASE(REPLACE_WHERE));
         SET REPLACE_WHERE = Insert( REPLACE_WHERE, last_occurency, LENGTH(REPLACE_THIS), REPLACE_WITH);
         SET last_occurency = last_occurency + LENGTH(REPLACE_WITH);
      END;
    END WHILE;
    RETURN REPLACE_WHERE;
END;
|
DELIMITER ;

使用该函数进行测试的示例代码如下:

SET @str = BINARY 'New York';
SELECT case_insensitive_replace(@str, 'y', 'K');

运行以上代码后,函数返回的结果是`New Kork`,说明函数成功地实现了不区分大小写的替换功能。

通过定义一个自定义函数case_insensitive_replace,并在其中使用LCASE函数将字符串转换为小写形式,然后再进行替换操作,可以实现不区分大小写的替换。

0
0 Comments

MySQL中的REPLACE函数是区分大小写的,这意味着在替换字符串时,它只会替换与目标字符串完全相同的字符串。然而,有时候我们希望进行不区分大小写的替换操作。例如,我们希望将数据库中所有出现的"my insensitive string"替换为"new string",而不管其大小写。在MySQL中,没有直接的函数可以实现这一点。

然而,对于那些从MySQL迁移到MariaDB的用户来说,他们可以利用MariaDB中的新函数REGEXP_REPLACE来实现不区分大小写的替换操作。REGEXP_REPLACE函数使用正则表达式作为模式,并将匹配的字符串替换为新的字符串。在该函数参数中,通过在模式开头添加"(?i)"来实现不区分大小写的匹配。

以下是一个示例代码:

UPDATE `myTable`
SET `myField` = REGEXP_REPLACE(`myField`, '(?i)my insensitive string', 'new string') 
WHERE `myField` REGEXP '(?i)my insensitive string'

其中,"(?i)"选项使得后续的匹配都不区分大小写(如果放在模式的开头,则整个模式都不区分大小写)。

更多关于REGEXP_REPLACE函数的信息可以参考MariaDB官方文档:https://mariadb.com/kb/en/mariadb/pcre/

另外,从MySQL 8.0版本开始,也引入了类似的函数regexp_replace,可以实现不区分大小写的替换操作。具体使用方法可以参考MySQL官方文档:https://dev.mysql.com/doc/refman/8.0/en/regexp.html

需要注意的是,在上述代码中的"where ..."部分并不是必需的,因为该函数只会在找到匹配项时进行替换。但是,这里提到了可以在where条件中使用正则表达式,这在普通的MySQL中是支持的,但不支持regexp_replace函数。

通过使用REGEXP_REPLACE函数或者在MySQL 8.0版本中使用regexp_replace函数,我们可以实现不区分大小写的替换操作。这为我们处理不区分大小写的字符串替换问题提供了便利。

0
0 Comments

在MySQL中进行大小写不敏感的替换有时会遇到问题,下面是一个解决方法:

如果replace(lower())无法工作,你需要创建一个新的函数。

例如,我需要保留原始字符串中未被替换部分的大小写,可以使用以下语句进行替换:

UPDATE repSchedule SET Email=REPLACE ( LOWER(email), '.com','.co.uk')

这样,替换后的字符串将保留原始字符串中的大小写。

0