在MySQL Query中删除或替换为空白部分字符串

时间:2011-09-08 16:42:02

标签: mysql case

我正在尝试通过SQL查询替换字符串的某些部分。

该列保存格式为:

的数据
United States Postal Service&nbsp;<br> (Express Mail<sup>&reg;</sup><br>---Approx. delivery time 07-Sep-2011):

我正试图让它像这样导出:

United States Postal Service (Express Mail---Approx. delivery time 07-Sep-2011):

为此,我使用CASE,如下:

SELECT 
    CASE ot.title
        WHEN 'Free' THEN ''
        WHEN '&nbsp;<br>' THEN ' '
        WHEN '<sup>&reg;</sup> ' THEN ' '
        WHEN '<br>---' THEN '---'
        ELSE ot.title
    END
FROM orders_total AS ot;

但是,它不起作用。我假设CASE仅支持处理整个字符串,而不仅仅是它的一部分。

有什么想法吗?

和平 克里斯

REPLACE函数在这里解决了问题,工作子查询:

(SELECT REPLACE(REPLACE(REPLACE(REPLACE(ot.title, '(For orders of $75.00 or more with a maximum package weight of 50  lbs ):', ''), '&nbsp;<br>', ' '), '<sup>&reg;</sup>', ' '), '<br>', '') FROM orders_total AS ot WHERE ot.orders_id = o.orders_id AND ot.class = 'ot_shipping') AS orders_shipping_class

4 个答案:

答案 0 :(得分:2)

case语句与if语句类似,但只对完整字段进行直接相等性检查。你的陈述归结为

if (ot.title == 'Free') {
    ' '
} else if (ot.title == '&nbsp;<br>') {
    ' '
etc...

对于这种事情,你将不得不使用嵌套的REPLACE()调用,这非常快速地变得非常丑陋:

SELECT REPLACE(REPLACE(REPLACE(ot.title, 'Free', ' '), '&nbsp;<br>', ' '), 'etc...', ' ') etc...

答案 1 :(得分:0)

您可能希望在此处使用多个嵌套REPLACE函数。我将为前两个案例提供一个样本,以便您明白这一点。

SELECT REPLACE(REPLACE(ot.title, 'Free', ''), '&nbsp;<br>', ' ')
    FROM orders_total AS ot;

答案 2 :(得分:0)

MySQL的REPLACE()做了你想做的事情。正如其他答案正确指出的那样,要删除多个子字符串,您需要将一堆REPLACE调用嵌套在一起。

如果你真的只是选择那个值,就像你实际上并没有在SQL方面使用改变的字符串一样,你可能最好选择原样并用你的语言处理它。选择。

答案 3 :(得分:0)

Case是一个switch语句,它不是遍历字符串的迭代器的一部分。

SQL根据查询检索数据或修改数据,但它不适用于输出数据的实际操作或格式化。这就是代码的意思。

如果您计划在生产代码中包含任何这些解决方案,请听取我的建议而不要这样做。你会后悔的。

我建议使用嵌套的替换语句运行更新查询,以便在将数据保存到数据库之前清理现有数据并清理输入数据。