亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在SQLite查詢中忽略重音(Android)

如何在SQLite查詢中忽略重音(Android)

收到一只叮咚 2019-09-03 17:12:44
我是Android的新手,我正在使用SQLite進行查詢。我的問題是,當我在字符串中使用重音時,例如AAAAAAAAAAAAAAAAAA如果我做:SELECT * FROM TB_MOVIE WHERE MOVIE_NAME LIKE '%a%' ORDER BY MOVIE_NAME;回歸:AAAaaa(它忽略了其他人)但如果我這樣做:SELECT * FROM TB_MOVIE WHERE MOVIE_NAME LIKE '%à%' ORDER BY MOVIE_NAME;回歸:ààà(忽略標題“ààà”)我想在SQLite數據庫中選擇字符串而不關心重音和大小寫。請幫忙。
查看完整描述

3 回答

?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

通常,SQL中的字符串比較由列或表達式COLLATE規則控制。在Android中,只預定義了三個校對序列:BINARY(默認),LOCALIZED和UNICODE。它們都不適合您的用例,遺憾的是,Java API中沒有公開用于安裝新歸類函數的C API。


要解決這個問題:


例如,向表中添加另一列 MOVIE_NAME_ASCII

將值存儲到此列中并刪除重音符號。您可以通過將字符串規范化為Unicode Normal Form D(NFD)并刪除非ASCII代碼點來刪除重音,因為NFD表示重音字符大致為純ASCII +組合重音符號:


String asciiName = Normalizer.normalize(unicodeName, Normalizer.Form.NFD)

    .replaceAll("[^\\p{ASCII}]", "");

您的文本是否在此ASCII規范化列上搜索,但顯示原始unicode列中的數據。


查看完整回答
反對 回復 2019-09-03
?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

您需要查看這些,而不是重音字符,而是完全不同的字符。您也可以尋找a,b或c。話雖這么說,我會嘗試使用正則表達式。它看起來像:


SELECT * from TB_MOVIE WHERE MOVIE_NAME REGEXP '.*[aAàà].*' ORDER BY MOVIE_NAME;


查看完整回答
反對 回復 2019-09-03
  • 3 回答
  • 0 關注
  • 472 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號