关于PostgreSQL截取某个字段中的部分内容进行排序的问题


    目录
  • 一.最基本的order by排序
  • 二.步入正题

    一.最基本的order by排序
    本文使用的测试数据库信息如下:
    
    1.单列排序案例:查询student表中所有数据并且按照成绩从大到小排序
    
SELECT * FROM student order by score desc

    2.多列排序案例:查询student表中所有数据并且先按照成绩从大到小排序,如果成绩相同,再按照 id 从大到小排序
    两种写法均可:
    
SELECT * FROM "student" order by (score,id) desc
SELECT * FROM "student" order by score desc,id desc

    错误写法:
    
SELECT * FROM "student" order by score,id desc

    上述写法的意思是:先按照成绩从小到大排序,如果成绩相同,再按照id从大到小排序
    二.步入正题
    开发过程中遇到一个案例,例如上面student表中的学号字段(stu_number),学号前三位和后面三位都是相同的,现在需要按照stu_number的中间三位进行从大到小排序,使用了substr()函数。
    
SELECT substr(stu_number,4,3),* FROM "student" order by substr(stu_number,4,3) desc

    效果如下:
    
    PostgreSQL中substr()函数的用法介绍:
    1.从str内容的第2个字符开始截取,直到结束——substr(str,pos)
    
substr('HelloWord',2)

    2.从str内容的第2个字符开始截取,截取长度为3的字符串——substr(str,pos,len)
    
substr('HelloWord',2,3)

    substr()函数的第一个参数可以为固定的字符串内容,如上面的'HelloWord',也可以直接用数据库表中的某个字段,如上面案例中填写的stu_number字段,但是填写的字段必须为字符串类型
    Java中substring()方法和PostgreSQL中substr()函数都是用来截取字符串的,但是用法上有些许区别:
    1.Java中substring()方法的索引是从0开始的,而PostgreSQL中substr()函数的索引是从1开始的,例如:
    
//Java
String str = "HelloWord";
String substr = str.substring(2);
//PostgreSQL
substr('HelloWord',2)

    上面的Java代码的意思是从第三个字符开始截取,直到结束,而PostgreSQL代码的意思是从第二个字符开始截取,直到结束。
    2.参数含义不同
    Java中substring(int beginIndex, int endIndex)表示从第beginIndex+1个字符开始截取,直到第endIndex个字符,例如:
    
String str = "HelloWord";
String substr = str.substring(2,6);

    上面的Java代码的意思是从第三个字符开始截取,直到第六个字符,即截取的内容为:lloW
    PostgreSQL中substr(str, pos, len)函数表示从第pos个字符开始截取,截取长度为len的字符串,例如:
    
substr('HelloWord',2, 6)

    上面的代码的意思是从第二个字符开始截取,截取长度为6的字符串,即截取的内容为:elloWo
    到此这篇关于PostgreSQL截取某个字段中的部分内容进行排序的文章就介绍到这了,更多相关PostgreSQL排序内容请搜索电脑手机教程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持电脑手机教程网!