【问题标题】:How to remove <br>s that are in the beginning of the string?如何删除字符串开头的 <br>?
【发布时间】:2018-07-02 08:41:09
【问题描述】:

这是我的桌子:

-- mytb
+----+---------------------------+
| id |         content           |
+----+---------------------------+
| 1  | <br> whatever ..          |
| 2  | whatever <br> whatever .. |
| 3  |    <br> whatever ..       |
| 4  | <br> whatever <br> ..     |
+----+---------------------------+

我需要删除字符串开头的所有&lt;br&gt;s。我可以在 PHP 正则表达式中使用 ^ 指定它。我怎样才能在 MySQL 中做同样的事情?

update mytb set content = trim(content)

它只是删除了周围的空间。

【问题讨论】:

  • 你用的是哪个版本的mysql?
  • set content = REPLACE(content, '&lt;br&gt;', '') ?
  • 您想只删除字符串开头的&lt;br&gt;,还是删除字符串中的所有&lt;br&gt;

标签: mysql sql


【解决方案1】:

您可以使用这样的查询:

SELECT REGEXP_REPLACE('<br>Hello<br>world<br>','^(<br>)*(.*?)(<br>)*$','\\2');

示例

MariaDB [(none)]> SELECT REGEXP_REPLACE('<br>Hello<br>world<br>','^(<br>)*(.*?)(<br>)*$','\\2');
+------------------------------------------------------------------------+
| REGEXP_REPLACE('<br>Hello<br>world<br>','^(<br>)*(.*?)(<br>)*$','\\2') |
+------------------------------------------------------------------------+
| Hello<br>world                                                         |
+------------------------------------------------------------------------+
1 row in set (0.00 sec)

MariaDB [(none)]> SELECT REGEXP_REPLACE('Hello<br>world<br>','^(<br>)*(.*?)(<br>)*$','\\2');
+--------------------------------------------------------------------+
| REGEXP_REPLACE('Hello<br>world<br>','^(<br>)*(.*?)(<br>)*$','\\2') |
+--------------------------------------------------------------------+
| Hello<br>world                                                     |
+--------------------------------------------------------------------+
1 row in set (0.00 sec)

MariaDB [(none)]> SELECT REGEXP_REPLACE('<br>Hello<br>world','^(<br>)*(.*?)(<br>)*$','\\2');
+--------------------------------------------------------------------+
| REGEXP_REPLACE('<br>Hello<br>world','^(<br>)*(.*?)(<br>)*$','\\2') |
+--------------------------------------------------------------------+
| Hello<br>world                                                     |
+--------------------------------------------------------------------+
1 row in set (0.00 sec)

MariaDB [(none)]> SELECT REGEXP_REPLACE('Hello<br>world','^(<br>)*(.*?)(<br>)*$','\\2');
+----------------------------------------------------------------+
| REGEXP_REPLACE('Hello<br>world','^(<br>)*(.*?)(<br>)*$','\\2') |
+----------------------------------------------------------------+
| Hello<br>world                                                 |
+----------------------------------------------------------------+
1 row in set (0.00 sec)

MariaDB [(none)]>

【讨论】:

  • Mariadb 在这里,他要求 mysql。
【解决方案2】:

您可以在 MYSQL 中使用 REGEXP:

SELECT REPLACE('content','<br>','') as content  FROM table WHERE content REGEXP '^<br>'

【讨论】:

    【解决方案3】:
    SELECT REPLACE('content','<br>','') FROM MYTB
    WHERE content LIKE '<br>%'
    

    【讨论】:

    • 他说开始
      不是全部
    • replace() 将替换字符串中的 all 次出现。 IE。它将用 id=4 替换记录中的两个 '
      '
    【解决方案4】:
    SELECT CASE WHEN substr(content,1,4) ='<br>' 
                THEN substr(content,5,len(content))  
                ELSE content 
           END as content  
    

    【讨论】:

      【解决方案5】:

      使用带有 if 条件的 MYSQL 子字符串。

      SET content = TRIM
                      (IF
                        (SUBSTRING
                           (TRIM(content), 1, 4) = '<br>',
                            SUBSTRING(TRIM(content), 5), content
                        )
                      );
      

      【讨论】:

        【解决方案6】:

        MYSQL有一个substring函数可以使用:

        UPDATE mytb SET content = SUBSTRING(content, 5)
        WHERE content LIKE '<br>%'
        

        【讨论】:

          猜你喜欢
          • 2013-10-30
          • 1970-01-01
          • 2015-01-28
          • 1970-01-01
          • 2017-07-07
          • 1970-01-01
          • 1970-01-01
          • 2019-11-15
          • 2016-03-16
          相关资源
          最近更新 更多