在忽略Vertica中的重音时对查询结果进行排序

时间:2015-11-09 19:23:38

标签: sql sorting vertica

我正在运行一个相当简单的查询来选择Vertica 7.1中表格的内容,我有一个关于最后排序的问题。你看,这张桌子用法语显示各种健康服务......所以我自然会碰巧有一些重音字符。例如,假设我的表中有以下数据,并在以下情况后立即运行查询:

//This is some sample data

Électrocardiogramme
Radiographie
Anesthésie
Équipement divers
Massothérapie
Encéphalogramme

//This is the query I run
select * from myTable order by Description

这是我目前最终的结果:

Anesthésie
Encéphalogramme
Massothérapie
Radiographie
Électrocardiogramme
Équipement divers

正如您所看到的,重音符号会以这样的方式抛出排序,即“É”全部出现在列表的末尾。现在我理解它背后的逻辑,因为在UTF-8表中,“E”和“É”是两个不同的字符,所有重音字符在技术上都出现在“正常字母之后”,因此结果如上所示。

但是,就我而言,我希望以这种方式呈现结果:

Anesthésie
Électrocardiogramme
Encéphalogramme
Équipement divers
Massothérapie
Radiographie

基本上,我希望Vertica将重音角色视为其不重要的对手。有没有办法在不改变表中包含的数据的情况下做到这一点?

2 个答案:

答案 0 :(得分:2)

您希望更改排序顺序的COLLATION。根据描述,我假设是法国人。您可以找到排序规则名称或区域设置here的完整选项列表。

SELECT * FROM myTable ORDER BY COLLATION(Description,'FRA')

答案 1 :(得分:-1)

如果您更好地订购它们,您可以使用以下功能:

- 使用colation funtion

COLLATION ( 'expression' [ , 'locale_or_collation_name' ] )

或(不那么干净)

select * from table 
order by replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(Description, 'é', 'e'), 'è', 'e'),'ê', 'e'), 'ë', 'e'), 'è', 'e'), 'ï','i'), 'î', 'i'), 'ô', 'o'), 'œ','oe'), 'à', 'a'), 'â', 'a'), 'ù', 'u'), 'û', 'u'), 'ü', 'u'), 'ÿ', 'y'), 'É', 'E'), 'È', 'E'),'Ê', 'E'), 'Ë', 'E'), 'Ë', 'E'), 'Ï','I'), 'Î', 'I'), 'Ô', 'O'), 'Œ','OE'), 'À', 'A'), 'Â', 'A'), 'Ù', 'U'), 'Û', 'U'), 'Ü', 'U'), 'Ÿ', 'Y')
  • 这将最终完成这项工作,但您必须嵌入任何其他重音选项。