【问题标题】:MySQL: Select specific strings and replace on several locationsMySQL:选择特定字符串并在多个位置替换
【发布时间】:2014-01-22 15:29:07
【问题描述】:

表格有几列。其中之一是“视频”。有很多行,所有单元格都包含一个字符串。字符串应该有更多的配件。它们包含标签和 url 的不同名称,除了标签内的“XYREE -”,它永远不会改变。

这是想要的字符串:

{"label":"XYREE - A small title",
"link":"http://google.com/hasAlengthOf50symbols"}   

这是实际的字符串:

XYREE - A small title |-|http://google.com/hasAlengthOf50symbols

这是我试图找到想要的行并替换其中的一部分。

SELECT *  FROM `items` WHERE `video` 
NOT REGEXP '{"label":"XYREE' REPLACE(video, 'XYREE', '{"label":"XYREE')

提前致谢。

【问题讨论】:

  • 它是哪个 RDBMS?我猜是 MySQL...
  • 您要更新表格,将 ACTUAL 字符串替换为 video 列中的 WANTED 字符串。
  • 我更新了问题。字符串不同。
  • 目前还不清楚你真正想要什么。请 1) 明确说明您想更改表中的值还是只想选择增强值 2) 提供几行具有 dissimilar 值的样本数据表格形式 3) 再次以表格形式提供所需的结果

标签: mysql sql select replace


【解决方案1】:

你在寻找这样的东西吗?

SELECT id, CONCAT('{"label":"', 
                  TRIM(SUBSTRING_INDEX(video, '|-|', 1)), 
                  '","link:"', 
                  TRIM(SUBSTRING_INDEX(video, '|-|', -1)), '"}') video
  FROM items
 WHERE ...

示例输出:

|身份证 |视频 | |----|-------------------------------------------- ---------------------------------------| | 1 | {"label":"XYREE - 一个小标题","link:"http://google.com/hasAlengthOf50symbols"} |

这里是SQLFiddle演示


如果您需要实际替换(更新)表中的值

UPDATE items
   SET video = CONCAT('{"label":"', 
                      TRIM(SUBSTRING_INDEX(video, '|-|', 1)), 
                      '","link:"', 
                      TRIM(SUBSTRING_INDEX(video, '|-|', -1)), '"}')
 WHERE ...

【讨论】:

    【解决方案2】:

    这可以在一个步骤中完成,但为了清楚起见,我在多个步骤中替换。

    Update items
    Set video = replace(video,'XYREE','{"label":"XYREE')
    
    
    Update items
    Set video = replace(video,'|-|','","link":"')
    
    
    
    Update items
    Set video = concat(video,'"}')
    

    【讨论】:

    • 是的,谢谢你已经在上面了。如何使用 mysql 中的结尾“}”符号来做到这一点?
    • 你想对结束符号做什么,使用 concat() 我已将它添加到字符串末尾
    猜你喜欢
    • 2015-08-29
    • 2017-09-17
    • 1970-01-01
    • 2016-12-11
    • 2015-10-18
    • 2011-01-15
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多