在MYSQL的记录末尾添加句点或标点?

在MYSQL的记录末尾添加句点或标点?,mysql,Mysql,我的数据库中有一列描述。当输入数据时,一些描述在末尾缺少一个句点,我想更新这些行,如果它们不存在,则添加它们 使用REGEXP函数的最佳方法是,还是有更好的方法 编辑: 这个过程比我原先想象的要复杂得多,所以我想把这个过程分享给其他可能觉得有用的人 第一个复杂的问题是,我在一些字符串的末尾有带空格和其他字符的记录,我就是这样处理的 UPDATE table_name SET col_name = REPLACE(TRIM(TRAILING ' ' FROM col_name),

我的数据库中有一列描述。当输入数据时,一些描述在末尾缺少一个句点,我想更新这些行,如果它们不存在,则添加它们

使用
REGEXP
函数的最佳方法是,还是有更好的方法

编辑:
这个过程比我原先想象的要复杂得多,所以我想把这个过程分享给其他可能觉得有用的人

  • 第一个复杂的问题是,我在一些字符串的末尾有带空格和其他字符的记录,我就是这样处理的

    UPDATE table_name SET col_name = REPLACE(TRIM(TRAILING ' ' FROM col_name), 
                                             TRIM(TRAILING '\r' FROM col_name), 
                                             TRIM(TRAILING '\n' FROM col_name))
    
  • 第二个问题是在添加句点时排除了其他几个标点符号。这是最后一个查询

    UPDATE table_name
    SET col_name = CONCAT(col_name,'.')
    WHERE RIGHT(col_name,1) <> '.'
    AND RIGHT(col_name,1) <> '!'
    AND RIGHT(col_name,1) <> '?'
    
    更新表\u名称
    设置col_name=CONCAT(col_name,“.”)
    其中右侧(col_name,1)“.”
    右边(col_name,1)“!”
    还有右边(col_name,1)“?”
    
  • 更新表
    设置描述=如果(右(描述,1)”,描述,CONCAT(描述,”);
    
    基本上,这只是更新描述字段中的每个值;如果它以句点结束,则只插入相同的值(即,不改变任何内容)。如果它没有在一个句点中结束,它会将一个句点连接到末尾。

    updatetable
    设置描述=如果(右(描述,1)”,描述,CONCAT(描述,”);
    

    基本上,这只是更新描述字段中的每个值;如果它以句点结束,则只插入相同的值(即,不改变任何内容)。如果它没有在一个周期内结束,它会将一个连接到末尾。

    只需使用
    update
    类似的

    update table t
        set col = concat(col, '.')
        where col not like '%.';
    
    编辑:

    对于多种类型的标点符号,可以使用正则表达式,但我只需要:

    update table t
        set col = concat(col, '.')
        where right(col, 1) not in ('.', ';', '!', '?', . . .);
    

    只需使用
    update
    和类似的

    update table t
        set col = concat(col, '.')
        where col not like '%.';
    
    编辑:

    对于多种类型的标点符号,可以使用正则表达式,但我只需要:

    update table t
        set col = concat(col, '.')
        where right(col, 1) not in ('.', ';', '!', '?', . . .);
    

    您可以使用
    right
    功能

    也许你可以做你想做的事

    update table_name
    set col_name = concat(col_name,'.')
    where right(col_name,1) <> '.'
    
    更新表\u名称
    设置col_name=concat(col_name,“.”)
    其中右侧(col_name,1)“.”
    
    您可以使用
    右侧
    功能

    也许你可以做你想做的事

    update table_name
    set col_name = concat(col_name,'.')
    where right(col_name,1) <> '.'
    
    更新表\u名称
    设置col_name=concat(col_name,“.”)
    其中右侧(col_name,1)“.”
    
    这对于尾随标点符号(可选后跟零个或多个空格字符,包括空格、CR和LF)来说是“真”的

    这可能比任何其他技术都更有效,因为它只查看每一行一次(没有And或or)。(是的,REGEXP通常比LIKE慢。但在这种情况下,一个REGEXP正在做几个LIKE/RIGHTs/etc的工作。)

    当然,您可能需要预修剪数据。这将我的“答案”削减到

    WHERE col_name NOT REGEXP '[.!?]$'
    
    这对于尾随标点符号(可选后跟零个或多个空格字符,包括空格、CR和LF)来说是“真”的

    这可能比任何其他技术都更有效,因为它只查看每一行一次(没有And或or)。(是的,REGEXP通常比LIKE慢。但在这种情况下,一个REGEXP正在做几个LIKE/RIGHTs/etc的工作。)

    当然,您可能需要预修剪数据。这将我的“答案”削减到

    WHERE col_name NOT REGEXP '[.!?]$'
    

    对(…,1)
    可能比像“%”这样的
    快,所以我更喜欢这个答案。请参阅我在上面对Gordon的评论。不幸的是,这个查询也有同样的问题,返回的记录中已经有句点,并且没有空格。这很奇怪。你能提供一些你不想更新的句点以外的结束标点的示例数据吗?例如…
    但是我能解决这个问题。我发现返回的行有一个回车。我将接受你的答案,因为它比上面的稍微快一点,比下面的要简单。谢谢Abhik。@RickJames…它们可能差不多。但是,
    左(…,1)
    比像“%”这样的
    慢,因为后者可以使用索引。
    右(…,1)
    可能比“%”之类的
    快,所以我更喜欢这个答案。请参阅我对Gordon的评论。不幸的是,这个查询也有同样的问题,返回的记录已经有句点,没有空格。这很奇怪。你能提供一些句点以外的结束标点的示例数据吗我不想更新?例如……
    ,但我可以解决这个问题。发现返回的行具有回车符。我会接受你的答案,因为它比上面的答案稍微快一点,比下面的答案更简单。谢谢阿比克。@RickJames。他们可能差不多。但是,
    LEFT(…,1)
    比像“%”这样的
    慢,因为后者可以使用索引。错误--不要检查
    ='
    ,检查
    !='错误--不要检查
    ='
    ,检查
    !='作为测试,我尝试将其作为select语句。我很快发现问题比我想象的更复杂,因为字符串可能以其他标点符号结尾,在这种情况下,我不想添加句点,但很容易处理。有些还带有空格或换行符,这显然需要不同的解决方案。这当然超出了我的问题范围,但我还发现使用这种方法的多行实际上已经有一个句点,并且没有空格/换行符。我不明白为什么,除非有一个隐藏的字符?我发现罪犯是一个回车
    \r
    。作为测试,我试着将其作为select语句。我很快发现问题比我想象的更复杂,因为字符串可能以其他标点符号结尾,在这种情况下,我不想添加句点,但很容易处理。有些人也有