相关疑难解决方法(0)

PostgreSQL 排序

我在 PostgreSQL 中有一个排序问题,数据如下:

name
-----
@CF
@CG
CD
CE
Run Code Online (Sandbox Code Playgroud)

我用过select name from table order by name,结果如下:

name
-----
CD
CE
@CF
@CE
Run Code Online (Sandbox Code Playgroud)

似乎 Postgres 只是忽略了特殊字符@并对左边的字符串进行了排序。但是,我希望它是这样排序的:

name
-----
@CF
@CG
CD
CE
Run Code Online (Sandbox Code Playgroud)

搜索互联网没有帮助。我希望这里有人可以提出建议。

sql sorting postgresql collation

3
推荐指数
1
解决办法
2157
查看次数

我如何构建一个以与PostgreSQL相同的方式对Strings进行排序的比较器?

我正在编写一个集成测试,它将一个复合体传递order by给PostgreSQL,然后检查数据是否以正确的顺序返回.我正在用Java编写这个集成测试,它的String.compareTo方法似乎与PostgreSQL不同.我在PostgreSQL数据库上运行了这个:

SELECT regexp_split_to_table('D d a A c b', ' ') ORDER BY 1;
Run Code Online (Sandbox Code Playgroud)

它的回应如下:

a
A
b
c
d
D
Run Code Online (Sandbox Code Playgroud)

然后我创建了这个单元测试,将其与Java排序的方式进行比较:

import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;
import org.junit.Test;

import java.util.List;

import static junit.framework.Assert.assertEquals;

public class PostgresqlSortOrderTest {

    @Test
    public void whenJavaSortsStringsThenItIsTheSameAsWhenPostgresqlSortsStrings() {
        List<String> postgresqlOrder = Lists.newArrayList("a", "A", "b", "c", "d", "D");
        Ordering<String> ordering = new Ordering<String>() {
            @Override
            public int compare(String left, String right) {

                return left.compareTo(right);
            }
        };
        List<String> javaOrdering = ordering.sortedCopy(postgresqlOrder);
        assertEquals(postgresqlOrder, javaOrdering);
    } …
Run Code Online (Sandbox Code Playgroud)

java sorting string postgresql

3
推荐指数
1
解决办法
807
查看次数

标签 统计

postgresql ×2

sorting ×2

collation ×1

java ×1

sql ×1

string ×1