【问题标题】:UPDATE query that does not take into account upper and lower case不考虑大小写的UPDATE查询
【发布时间】:2018-07-20 07:24:42
【问题描述】:

我需要更新我的数据库中的一些表,用另一个词替换一个词,但问题是它不必区分大小写。我不想对大小写的每一种组合都进行咨询:

UPDATE theme SET message = REPLACE(message,'ToreCube','star');
UPDATE theme SET message = REPLACE(message,'Torecube','star');
UPDATE theme SET message = REPLACE(message,'toreCube','star');
UPDATE theme SET message = REPLACE(message,'torecube','star');

我还希望单词之间的空格无法区分,例如:

UPDATE theme SET message = REPLACE(message,'Tore Cube','star');
UPDATE theme SET message = REPLACE(message,'ToreCube','star');

什么是不考虑大小写且不考虑空格的 UPDATE 查询?

谢谢

【问题讨论】:

  • 你的 dbms 是什么?

标签: sql case


【解决方案1】:

使用 LOWER(),如果您使用的是 SQLServer,这将使您的列数据小写,然后在替换字符串中使用小写。

UPDATE theme SET [message] = REPLACE(LOWER([message]),'tore cube','star');
UPDATE theme SET [message] = REPLACE(LOWER([message]),'torecube','star');

【讨论】:

    【解决方案2】:

    取决于数据库管理系统的类型,但它应该是围绕字符串的“lower”和“trim”函数的组合。

    【讨论】:

    • 谢谢,你能告诉我考虑到这个查询的例子会是什么样子吗? UPDATE 主题 SET message = REPLACE(message,'ToreCube','star');
    • 我使用 PostgreSQL,所以看起来像这样“UPDATE theme SET message = REPLACE(message, LOWER(TRIM('ToreCube')), 'star');”
    • 但这只会匹配message中的小写字符串,不是吗?
    • @JoakimDanielson 正确,在这种情况下,也将消息转换为小写以进行匹配,即 LOWER(TRIM(message))
    【解决方案3】:

    使用正则表达式替换来进行不区分大小写的替换

    regexp_replace(message, ‘torecube’, ’star’, ‘i’)
    

    最后一个参数“i”使其不区分大小写

    我刚刚意识到 OP 没有提到 PostgreSQL,所以我们不知道这是否是 dbms。在我们知道之前,我会暂时留下我的答案

    【讨论】:

      【解决方案4】:

      由于我们不确定使用哪种 RDMS OP,我想介绍一个适用于 SQL-Server 环境的可能解决方案:

      UPDATE theme SET message = 
        REPLACE(REPLACE(message,'tore cube','star'),'torecube','star');
      

      在 SQL-server 中,标准设置不区分大小写。当我们想要更换时,这使得解决这种情况相对容易,请参见此处的小演示: http://rextester.com/XGYX82444

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多