Php Symfony 2/Oracle Querybuilder结果区分大小写
我在Symfony 2中有一个查询结果的奇怪行为。 我在Oracle数据库中有这样的数据,顺序如下:Php Symfony 2/Oracle Querybuilder结果区分大小写,php,oracle,symfony,doctrine-orm,query-builder,Php,Oracle,Symfony,Doctrine Orm,Query Builder,我在Symfony 2中有一个查询结果的奇怪行为。 我在Oracle数据库中有这样的数据,顺序如下: BU 4 2015 bU 2 BUC BUS BU 4 2014 注意,第二个数据中的小写字母 我只想按字母顺序显示此列表,不需要任何区分大小写的支持。 想要的结果是: - BU C - bU 2 - BU 4 2014 - BU 4 2015 - BU S 下面是使用Symfony 2.5.12制作的Querybuilder: $queryBuilder = $this->creat
- BU C
- bU 2
- BU 4 2014
- BU 4 2015
- BU S
下面是使用Symfony 2.5.12制作的Querybuilder:
$queryBuilder = $this->createQueryBuilder('e');
$queryBuilder->orderBy('e.name');
但在查询中,按以下顺序显示我的列表:
- BU C
- BU 4 2014
- BU 4 2015
- BU S
- bU 2
- 当我在Oracle数据库客户端中播放symfony 2 profiler中显示的查询时,我得到了想要的结果
- 当我转储查询生成器结果时,我得到了错误的顺序列表
$queryBuilder = $this->createQueryBuilder('e');
$queryBuilder
->select(e)
->addSelect('UPPER(e.name) as HIDDEN name')
->orderBy('name');
我只是想知道为什么我在querybuilder上会有这种奇怪的行为
谢谢。首先,你的“想要的结果”实际上不是按字母顺序排列的。不区分大小写的排序将产生以下顺序:
bU 2
BU 4 2014
BU 4 2015
BU C
BU S
其次,使用Oracle SQL进行不区分大小写排序的方法是在要排序的列上使用UPPER()
或LOWER()
,如下所示:
SELECT *
FROM e
ORDER BY UPPER(e.name);
最后,使用Doctrine QueryBuilder进行不区分大小写排序的方法就是这样做的:添加UPPER(e.name)作为隐藏名称,然后按该字段进行排序
在本例中,QueryBuilder没有奇怪的行为。首先,您的“想要的结果”实际上不是按字母顺序排列的。不区分大小写的排序将产生以下顺序:
bU 2
BU 4 2014
BU 4 2015
BU C
BU S
其次,使用Oracle SQL进行不区分大小写排序的方法是在要排序的列上使用UPPER()
或LOWER()
,如下所示:
SELECT *
FROM e
ORDER BY UPPER(e.name);
最后,使用Doctrine QueryBuilder进行不区分大小写排序的方法就是这样做的:添加UPPER(e.name)作为隐藏名称,然后按该字段进行排序
在本例中,QueryBuilder没有奇怪的行为。不太了解Oracle,但可能是排序规则有问题。不太了解Oracle,但可能是排序规则有问题。