sql—在sqlite3中将英文单词排在中文单词之前

34gzjxbg  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(355)

我有一个“phone\u contact”表,它有contactsid、devid、fname、fnamepinyinspel列。fname将有中文和英文两种名称。现在根据要求,我可以按以下顺序获得联系人:

FName            FNamePinYinSpel
北蔡王先生        Bei Cai Wang Xian Shen
广州房东          Fang Hua Lu Qi Tian Lian Suo
jie王             Jie wang
杰wang            Jie wang
Lastname Tess     Lastname Tess
李 二             Li er
李 四             Li si
李 一             Li yi
李 一 一          Li yi yi
林 二             Lin er
林 一             Lin yi
林 一 一          Lin yi yi
凌 一             Ling yi
凌 一 一          Ling yi yi
凌 二             Ling er
凌 依依           Ling yi yi

使用下面的查询

SELECT icu_load_collation('en-u-ks-level1-kr-latn-zh','PinyinM')";

SELECT FName from Phone_Contact where DevId is 1 ORDER BY substr(FNamePinYinSpel ,1,5), (substr(FName,1,5) < 'zz'), FName COLLATE PinyinM LIMIT 50 OFFSET 0 ;

但是下面提到了期望的结果。

FName              FNamePinYinSpel
北蔡王先生          Bei cai wang xian shen
广州房东            Fang hua lu qi tian lian suo
jie王              Jie wang
杰wang             Jie wang
Lastname Tess      Lastname Tess
李 二              Li er
李 四              Li si
李 一              Li yi
李 一 一           Li yi yi
林 二              Lin er
林 一              Lin yi
林 一 一           Lin yi yi
凌 二              Ling er
凌 一              Ling yi
凌 一 一           Ling yi yi
凌 依依            Ling yi yi

有人能帮我得到想要的输出吗注:fnamepinyinspel相当于英文的中文名字。

wljmcqd8

wljmcqd81#

你的 ORDER BY 条款不是做你想做的事。它只考虑了 FNamePinYinSpel .

ORDER BY substr(FNamePinYinSpel ,1,5), (substr(FName,1,5) < 'zz')

但似乎你想按整体排序 FNamePinYinSpel . 在这种情况下,只需删除5个字符的限制,没有必要包括 (substr(FName,1,5) < 'zz') 部分。如果中文名字和英文名字都混在一个单独的栏中,但是你有 FNamePinYinSpel 全是英文名字

ORDER BY FNamePinYinSpel

相关问题