1

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

¿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 之间。

4

2 回答 2

1

在西班牙语中,最多第一个字符是标点符号或有一个.... 您可以执行以下操作:

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

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

于 2013-08-20T16:54:59.060 回答
1

一种选择可能是尝试使用 UDF正则表达式 MySQL UDFs,特别是 REGEXP_REPLACE?。

另一种选择可能是使用common_schema,特别是replace_all函数,例如:

SELECT `mycolumn` FROM `mytable` ORDER BY `common_schema`.replace_all(`mycolumn`, '¡!¿?.', '');

您将不得不制定一些细节,但也是可能的选择。

于 2013-08-20T18:32:09.540 回答