mysql - 如何在没有标点符号的情况下在mySQL中排序

标签 mysql sql-order-by collation

考虑数据库表列中的以下西类牙语字符串:

¿Donde estas?
!Aqui ando¡
Porque
...Donde
¿Porque?

如果我使用 mySQL 提供的不同西类牙语排序规则对表列进行排序,标点符号将包含在排序中。一些西类牙语排序规则会将标点符号放在开头,一些放在结尾。

但是,根据西类牙文学院的说法,排序仅适用于官方西类牙语字母表(a、b、c、d、e、f、g、h、i、j、k、l、m、n , ñ, o, p, q, r, s, t, u ,v ,w ,x, y, z),因此绝不能使用标点符号来对字符串进行排序。 所有 mySQL 西类牙语排序规则使用的顺序都是错误的,我不想使用它们。

根据西类牙文学院的说法,上述字符串的正确排序顺序是:

!Aqui ando¡
¿Donde estas?
Donde estas
...Donde
Porque
¿Porque?

那么,我的下一个最佳选择是什么......

我可以在查询中使用正则表达式来订购没有标点符号的订单吗?

或者,我别无选择地创建一个列,我们称它为 sort_name,其中包含没有标点符号的字符串,并使用该列进行排序?这是最好的方法吗?

请记住,我仍然需要在 mySQL 中使用西类牙语排序规则来对字符 ñ 进行排序,这是一个介于 n 和 o 之间的字符。

最佳答案

在西类牙语中,最多第一个字符是标点符号或者有一个...。你可以这样做:

order by (case when left(col, 3) = '...' then substr(col, 4)
               when left(col, 1) in ('!', '?', . . .) then substr(col, 2)
               else col
          end)

(抱歉,我的键盘上没有适合 in 列表的西类牙文字符。)

关于mysql - 如何在没有标点符号的情况下在mySQL中排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18340661/

相关文章:

MYSQL外键到同一个表?

mysql - SQL LIMIT 获取最新记录

mysql - SQL查询: Order by greatest of two columns

CouchDB 查看排序规则,一键加入,搜索其他值

php - 不区分大小写的 MySQL 数据库

php - 为了和内爆一起

mysql - 根据复选框过滤 mysql 结果

c# - 与 Sqlexpress 连接

php - PHP 中的explode() 问题

linux - 有没有办法让 PostgreSQL 在使用某种语言进行整理时不折叠标点符号和空格?