0

这是我的查询,它试图在每个没有以正确标点符号结尾的句子末尾加上句号

UPDATE SentenceTable SET sentence=concat(sentence, '.') WHERE sentence NOT LIKE '%.' OR sentence NOT LIKE '%?' OR sentence NOT LIKE '%!';

但是,这最终会在每个句子的末尾加上句号。恐怕我上面的正则表达式有问题,也许我没有正确转义一些特殊字符?我究竟做错了什么?这个查询应该怎么读?

谢谢!

4

1 回答 1

2

OR在每个sentence NOT LIKE ..子句之间使用;使用AND应该解决这个问题:

UPDATE
    SentenceTable
SET
    sentence=concat(sentence, '.')
WHERE
    sentence NOT LIKE '%.'
    AND sentence NOT LIKE '%?'
    AND sentence NOT LIKE '%!';

这样做的原因是,假设以sentence结尾!,例如“这是一个句子!”。您的第一个子句是sentence NOT LIKE '%.'. 好吧,这句话不以 a 结尾.,并且因为您只使用OR-clauseWHERE停止解析其余的子句。当您切换到 时AND,它会评估所有条件,并且由于最后一个条件失败,句子将不会更新!

于 2012-11-05T03:39:33.650 回答