【问题标题】:CONCAT or REPLACE based on existance of value in MySQLCONCAT 或 REPLACE 基于 MySQL 中是否存在值
【发布时间】:2018-01-29 05:22:35
【问题描述】:

我有一个简单的 sql 查询,如下所示

SELECT REPLACE('TEST ABC XYZ NO JJJG', 'DEF', 'YES')

这将返回与旧字符串相同的字符串。我想在这里输出“TEST ABC XYZ NO JJJG YES”。如果文本存在,它应该替换文本,否则它应该附加在字符串的末尾。

【问题讨论】:

    标签: mysql replace concat


    【解决方案1】:

    假设column 包含“TEST ABC XYZ NO JJJG”,那么您可以编写如下查询:

    SELECT
        IF(
            REPLACE(column, 'DEF', 'YES') = column, -- If the replacement yielded no changes
            CONCAT(column, ' ', 'YES'), -- Simply append the text
            REPLACE(column, 'DEF', 'YES') -- Otherwise returned the replaced result
        ) AS replaced_column
    

    编辑:对您的评论(只需将REPLACE() 更改为INSTR()):

    SELECT
        IF(
            INSTR(column, 'DEF') = column, -- If the column contains the text
            REPLACE(column, 'DEF', 'YES'), -- Replace the result
            CONCAT(column, ' ', 'YES') -- Otherwise append the text
        ) AS replaced_column
    

    【讨论】:

    • 这个脚本会产生问题。会有条件,什么时候被替换的文本和被替换的文本可能相同。我的意思如下 SELECT IF( REPLACE(column, 'YES', 'YES') = column, -- 如果替换没有产生任何变化 CONCAT(column, ' ', 'YES'), -- 只需附加文本 REPLACE( column, 'YES', 'YES') -- 否则返回替换结果
    猜你喜欢
    • 2021-07-03
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 2022-08-18
    • 2014-01-29
    相关资源
    最近更新 更多