2012-11-05 48 views
0

這裏是我的查詢,它試圖把一個句號在每一個句子的結尾是不正確的標點符號結束MySQL的 - 試圖圈點了一句

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

然而,這最終把一個在每句話結束時都會停下來。恐怕上面的正則表達式有問題,也許我沒有正確地轉義一些特殊字符?我究竟做錯了什麼?此查詢應該如何閱讀?

謝謝!

回答

2

您在每個sentence NOT LIKE ..子句之間使用OR;使用AND應該解決這個問題:

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

這樣做的原因是因爲,假設sentence!結束,如「這是一句!」。你的第一個條款是sentence NOT LIKE '%.'。那麼,這句話不會以.結尾,而且因爲您只使用OR,所以WHERE-clause會停止解析其餘的子句。當您切換到AND時,它將評估全部的條件,並且自從最後一個失敗後,句子將不會更新!