如何让MySQL REPLACE函数仅匹配完整字符串而非子串执行替换
原有REPLACE函数为模糊子串匹配逻辑,只要字段内容包含目标字符就会触发替换,因此取值为Yes的记录中首字母Y也会被匹配替换,最终得到错误的Yeses结果。要实现仅全字段精确匹配时才替换,可使用以下两种常用方案:
方案1:CASE WHEN 一次性更新(全数据库兼容)
该方案适配MySQL、PostgreSQL、SQL Server等所有主流SQL数据库,不需要拆分执行语句:
UPDATE nashupdated SET SoldAsVacant = CASE WHEN SoldAsVacant = 'N' THEN 'No' WHEN SoldAsVacant = 'Y' THEN 'Yes' ELSE SoldAsVacant END;
逻辑说明:CASE关键字会对字段完整值做精确匹配,只有取值完全等于N/Y时才会执行替换,其余原有取值(No、Yes)会保持原样,不会产生误修改。
方案2:分批次带限定条件更新
如果更倾向拆分执行操作,可添加WHERE条件精确限定更新范围,避免影响其他取值的记录:
-- 将所有取值为N的记录更新为No UPDATE nashupdated SET SoldAsVacant = 'No' WHERE SoldAsVacant = 'N'; -- 将所有取值为Y的记录更新为Yes UPDATE nashupdated SET SoldAsVacant = 'Yes' WHERE SoldAsVacant = 'Y';
内容的提问来源于stack exchange,提问作者Marcus Chan
相关产品推荐
相关产品推荐

