SQL select 值然后在子查询中使用替换字符串

SQL select value and then use in sub query to replace string

在我的 sql table 中,我有一些值如下;

<![CDATA[9435547092]]>
<![CDATA[Company Name]]>

大多数行都有 CDATA 换行,我想从所有文件中删除它,所以我认为子查询会很好,例如;

SELECT value FROM attributes WHERE value LIKE "%<![CDATA[%";

会给我每个值,然后我想做

SELECT REPLACE(SELECT value FROM attributes WHERE value LIKE "%<![CDATA[%";, "<![CDATA[", '') FROM attributes

但这是无效的,有人知道这是怎么可能的吗?

这是你想要的吗?

select replace(replace(value, '<![CDATA[', ''), ']]>', '')

请注意,如果您的实际值为 "wraps",那么这可能会影响该值。我认为更通用的方法是:

select (case when value like '<![CDATA[%]]>'
             then substr(value, 9, length(value) - 3)
             else value
        end)

只需在 select 中使用替换即可获得正确的字符串

    SELECT replace(value , "<![CDATA[", '')
    FROM attributes 
    WHERE value LIKE "%<![CDATA[%";

如果您需要存储在数据库中,那么您需要更新

UPDATE attributes
set value =   replace(value , "<![CDATA[", '')
WHERE value LIKE "%<![CDATA[%";  

但您似乎在寻找 LIKE "% 之后的左侧字符串

select  right(value, length(value) - locate(value,']]')+2)
from attributes
WHERE value LIKE "%<![CDATA[%";  


UPDATE attributes
set value =  right(value, length(value) - locate(value,']]')+2)
WHERE value LIKE "%<![CDATA[%";  

请试试这个,

SELECT select SUBSTRING(value,10,LEN(value)-12) 
FROM attributes
WHERE value like '<![CDATA[%'

如果需要,可以删除 where 子句并按照上面的建议与 CASE 语句一起使用。