【问题标题】:SQL select value and then use in sub query to replace stringSQL 选择值,然后在子查询中使用来替换字符串
【发布时间】:2019-12-16 01:54:33
【问题描述】:

在我的 sql 表中,我有许多值如下;

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

大多数行都有一个 CDATA 包装,我想从所有文件中删除它,所以我想一个子查询会很好,比如;

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

会给我每个值然后我正在考虑做

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

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

【问题讨论】:

    标签: mysql sql replace cdata


    【解决方案1】:

    只需在选择中使用替换来获得正确的字符串

        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[%";  
    

    【讨论】:

    • 我得到一个错误; You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELECT replace(value , "&lt;![CDATA[", '') FROM attributes WHERE value LIKE ' at line 1上面replace函数的拼写我也更正了
    • 谢谢,所以知道显示这样的值; VALUE ]]&gt; 但是,当我在数据库行中预览它时,它并没有将它保存为新值。我还需要运行更新命令吗?
    • .. 我还添加了另一个关于 rigth 字符串的建议...希望有用
    【解决方案2】:

    这是你想要的吗?

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

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

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

    【讨论】:

    • 这不起作用,它说行受到影响,但看起来不像。是的,我确实需要一个更通用的查询,因为包装在 cdata 中可以是任何东西。所以我有一个名为 attributes 的表,它有一个 value 列,很多值都包含在 &lt;![CDATA[%VALUE IS HERE%]]&gt; 任何想法为什么上述不起作用?
    • 此 stmt 不提供任何数据更改 - 它为您提供所需的输出。你的桌子有多大?它有多少行(或多或少)?
    • @001221 。 . .如果您想更改数据,您应该使用update。我建议使用第二个示例中的逻辑这样做。
    【解决方案3】:

    请试试这个,

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

    如果需要,可以删除 where 子句,并且如上所述可以与 CASE 语句一起使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-05
      • 2013-01-30
      • 2014-07-03
      • 2015-02-15
      • 1970-01-01
      • 2020-06-09
      • 2023-02-23
      • 1970-01-01
      相关资源
      最近更新 更多