当存在特殊字符时,使用REPLACE()按字母数字顺序排序

时间:2015-11-16 18:32:45

标签: mysql sorting replace sql-order-by special-characters

我在SO上做过几次不同的搜索,寻找一个简单的解决方案来按字母顺序排序mySQL结果,其中某些字段可能包含特殊字符。解决方案:

"SELECT *, REPLACE(title '\"', '') AS indexTitle ORDER BY indexTitle ASC";

在这种情况下,我正在搜索以双引号开头的字符串,转义。

这可能不是一个很好的解决方案,其中特殊字符的类型是未知的,但对于一个简单的排序它很好地工作。

希望这有助于某人。

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是编写自己的函数以从String中删除非字母数字字符。 Google找到了我this example(我没有检查过它!)。然后你可以这样写:

SELECT *, remove_non_alphanum_char_f(title) AS indexTitle ORDER BY indexTitle ASC;

当然,正如@arkascha在上面的评论中所指出的那样,这是缓慢而且不可扩展的。更好的解决方案是返回一个步骤,如果可能的话,确保表格中的数据的格式正确。如果你真的需要特殊字符,那么在你的表中添加额外的列可能不会增加额外费用,这是title列,并且删除了特殊字符 - 然后你可以按该列排序。您可以在插入表格时执行剥离。