如何使用Doctrine对varchar列进行自然排序 [英] How natural sorting a varchar column with Doctrine

查看:21
本文介绍了如何使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆