删除某个单词后的所有文字

时间:2015-01-25 14:36:41

标签: php mysql sql

我在数据库中有数据,行如:

Ticket #3532 Updated
Ticket #43252 Opened
Ticket #5462 Opened
Ticket #353 Updated
每行

,在“更新或打开”一词后面有文字

我想在每一行上删除此文本,因此它只显示与上面完全相同的内容。

我尝试过使用:

strstr($result["notes"], 'Updated', true)

对于Updated行,但返回

Ticket #34564 

而不是更新一词

如何在PHP中或直接在SQL中执行此操作?

6 个答案:

答案 0 :(得分:1)

假设您谈论MySql,您可以选择以下内容:

SELECT CONCAT(SUBSTRING_INDEX(myColumn, 'Updated', 1), 'Updated')

使用where子句来处理只有&'39; Updated'。

的行

答案 1 :(得分:1)

您可以使用LOCATE()函数直接在SQL中进行更新,以查找字符串中的UpdatedOpened的第一个实例,以及LEFT()字符串函数将其截断到该位置加上单词UpdatedOpened的长度。使用字符串函数可以通过多种方式处理这个问题,但这是第一个想到的方法。

UPDATE tickets
SET notes = LEFT(notes, LOCATE('Opened', notes) + LENGTH('Opened'))
WHERE notes LIKE '%Opened%';

UPDATE tickets
SET notes = LEFT(notes, LOCATE('Updated', notes) + LENGTH('Updated'))
WHERE notes LIKE '%Updated%';

LEFT()LOCATE()都记录在MySQL string functions

Here is an example (as a SELECT)

And the same example reformulated for the UPDATE statements

答案 2 :(得分:1)

PHP解决方案

$str = 'Ticket #3532 Updated some text after';
$needle = 'Updated';

$substr = substr($str, 0, strpos($str, $needle) + strlen($needle));

答案 3 :(得分:0)

假设您正在使用MySQL并且您创建了适当的数据库备份,则以下查询应该完成此任务:

UPDATE `yourtable`
SET `yourcolumn` = CONCAT(
    SUBSTRING_INDEX(
        CONCAT(SUBSTRING_INDEX(`yourcolumn`, 'Updated', 1), 'Updated'),
    'Opened', 1),
    'Opened');

答案 4 :(得分:0)

    <?php
    $string = "Ticket #3532 Updated
    Ticket #43252 Opened
    Ticket #5462 Opened
    Ticket #353 Updated";

    echo preg_replace('/(Updated|Opened)/', '', $string);

    //    OR

    $string2 = "Ticket #3532 Updated";

    echo preg_replace('/(Updated|Opened)/', '', $string2);

    ?>

答案 5 :(得分:0)

就个人而言,我认为在MySQL中执行此操作有点麻烦,因为MySQL不支持REGEXP_REPLACE()REGEXP_SUBSTR()。另一方面,PHP有一个很好的正则表达式引擎,应该能够轻松地获得匹配。匹配的好正则表达式可能是:

/^(Ticket #\d+ (?:Updated|Opened)).*$/

您的代码可能类似于:

$new_notes = preg_replace('/^(Ticket #\d+ (?:Updated|Opened).*$/', '$1', $result["notes"]);