如何使用Doctrine对varchar列进行自然排序 [英] How natural sorting a varchar column with Doctrine
本文介绍了如何使用Doctrine对varchar列进行自然排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个表,其中的一列包含名称(Varchar),但某些名称中包含数字,并且顺序不是预期的。
我有类似的东西:
Courlis
D11 Espadon
D13 Balbuzard
D1 empacher
D2
但我希望:
Courlis
D1 empacher
D2
D11 Espadon
D13 Balbuzard
我找到了很多关于它的提示,但总是关于对仅存储为字符串的数字进行排序:添加0以将其转换为数字,检查字符串的长度以将1放在10之前,等等……但在我的情况下,这是行不通的。
我无法使用SQL Query,因为我以需要QueryBuilder的symfony应用程序的形式使用它。
推荐答案
这里提供了一种在PostgreSQL(从V10开始提供)中使用icu排序规则的方法:
CREATE COLLATION en_natural (
LOCALE = 'en-US-u-kn-true',
PROVIDER = 'icu'
);
CREATE TABLE atable (textcol text COLLATE en_natural);
COPY atable FROM STDIN;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself, or an EOF signal.
>> Courlis
>> D11 Espadon
>> D13 Balbuzard
>> D1 empacher
>> D2
>> .
test=# SELECT textcol FROM atable ORDER BY textcol;
textcol
---------------
Courlis
D1 empacher
D2
D11 Espadon
D13 Balbuzard
(5 rows)
这篇关于如何使用Doctrine对varchar列进行自然排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文