3

如何更新列 - 不区分大小写?

如果我运行下面的查询,它会按预期返回 62 条记录:

select entity_id 
from field_data_body 
where body_value like '%mailto:iss.servicedesk@example.com%';

返回 62 条记录

我正在尝试更新这些记录,以便将iss.servicedesk@example.com其替换为http://iss.servicedesk.example.com使用以下查询:

update field_data_body
SET body_value = REPLACE(body_value,'%mailto:iss.servicedesk@example.com%',
                        'http://iss.servicedesk.example.com');

不幸的是,它只更新了 52 条记录,因为它正在运行区分大小写的查询,例如Iss.Servicedesk@example.com在上述查询中无法识别。

如何运行上述更新查询,但不区分大小写以获取我希望更新的所有表?

我已经更新了下面的查询 - 当我知道有需要更新的链接时,它运行但没有找到任何要更新的结果:

update `field_data_body` SET `body_value` = REPLACE(body_value,'%mailto:iss.servicedesk@example.com%','https://iss.servicedesk.example.com')
where LOWER(CONVERT( body_value USING latin1)) like '%mailto:iss.servicedesk@example.com%'

关于我需要做些什么来修复它以使其正常运行有什么建议吗?

4

2 回答 2

4

与查询一起使用UPPER()LOWER()起作用。

于 2012-09-03T12:39:30.887 回答
2

仅供参考:LOWER 和 UPPER 不适用于 BINARY、VARBINARY 和 BLOB。如果您的字段属于这些类型之一,则需要使用 CONVERT 将字符串转换为非二进制字符串:

 LOWER(CONVERT(@str USING latin1))
于 2012-09-03T12:56:36.607 回答