SQL地址门牌排序,字典序转为数字序

这篇具有很好参考价值的文章主要介绍了SQL地址门牌排序,字典序转为数字序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

页面有一批地址数据查询,结果字符排序默认是字典序的,所以造成了门牌3号在30号之前,影响用户体验;

id, road_code, road_name, address_fullname, address_name
102	10086	人民一路	北江省南海市西湖区人民一路3号	3号
103	10086	人民一路	北江省南海市西湖区人民一路11号	11号
109	10086	人民一路	北江省南海市西湖区人民一路27号	27号
116	10086	人民一路	北江省南海市西湖区人民一路7号	7号
108	10086	人民一路	北江省南海市西湖区人民一路30号	30号
114	122847	幸福大道	北江省幸福市中新区幸福大道7号	7号
SELECT id, road_code, road_name, address_fullname, address_name
FROM address
WHERE road_code = 10086 
ORDER BY address_name ASC

SQL地址门牌排序,字典序转为数字序,sql,数据库,postgresql
想到办法是提取名称的数字再排序。数据量大有两千多万条,不可能都跑一边提取排序,要么冗余一个字段存放提取的数字?

“如非必要,勿增实体”——奥卡姆剃刀原则

新加字段代码要改,治理维护也是问题。考虑到就这里功能用到了这个排序,而且道路代码是必传值,先被road_code值筛选过滤后,最后实际提取转换的数据并不多。

SELECT id, road_code, road_name, address_fullname, address_name
FROM address
WHERE road_code = 10086 
ORDER BY COALESCE(NULLIF(regexp_replace(address_name, '\D','','g'), ''), '0')::NUMERIC ASC

COALESCE(NULLIF(regexp_replace(address_name, ‘\D’,‘’,‘g’), ‘’), ‘0’)::NUMERIC
正则全局匹配将地址中非数字替换成空字符,为了防止地址不存在或者没有数字的情况,
使用NULLIF()和COALESCE()兜底,统一置为’0’,最后转为NUMERIC数字类型用作排序。
(空字符串 ‘’::NUMERIC 类型转换报异常)
SQL地址门牌排序,字典序转为数字序,sql,数据库,postgresql

注:
COALESCE(value [, …])
返回第一个非空参数的值。当且仅当所有参数都为空时才会返回NULL空值。

NULLIF(value1, value2)
当value1和value2相等时,NULLIF返回NULL空值。 否则它返回value1。

另附,测试表和数据:文章来源地址https://www.toymoban.com/news/detail-674557.html

DROP TABLE IF EXISTS "public"."address";
CREATE TABLE "public"."address" (
  "id" int8 NOT NULL,
  "road_code" int8,
  "road_name" varchar(255) COLLATE "pg_catalog"."default",
  "address_fullname" varchar(255) COLLATE "pg_catalog"."default",
  "address_name" varchar(255) COLLATE "pg_catalog"."default"
);

COMMENT ON COLUMN "public"."address"."id" IS '主键';
COMMENT ON COLUMN "public"."address"."road_code" IS '道路编码';
COMMENT ON COLUMN "public"."address"."road_name" IS '道路名称';
COMMENT ON COLUMN "public"."address"."address_fullname" IS '地址全名';
COMMENT ON COLUMN "public"."address"."address_name" IS '地址名称';

INSERT INTO "public"."address" VALUES (102, 10086, '人民一路', '北江省南海市西湖区人民一路3号', '3号');
INSERT INTO "public"."address" VALUES (103, 10086, '人民一路', '北江省南海市西湖区人民一路11号', '11号');
INSERT INTO "public"."address" VALUES (109, 10086, '人民一路', '北江省南海市西湖区人民一路27号', '27号');
INSERT INTO "public"."address" VALUES (116, 10086, '人民一路', '北江省南海市西湖区人民一路7号', '7号');
INSERT INTO "public"."address" VALUES (108, 10086, '人民一路', '北江省南海市西湖区人民一路30号', '30号');
INSERT INTO "public"."address" VALUES (114, 122847, '幸福大道', '北江省幸福市中新区幸福大道7号', '7号');

ALTER TABLE "public"."address" ADD CONSTRAINT "address_pkey" PRIMARY KEY ("id");

到了这里,关于SQL地址门牌排序,字典序转为数字序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【SQL开发实战技巧】系列(三十四):数仓报表场景☞如何对数据分级并行转为列

    【SQL开发实战技巧】系列(一):关于SQL不得不说的那些事 【SQL开发实战技巧】系列(二):简单单表查询 【SQL开发实战技巧】系列(三):SQL排序的那些事 【SQL开发实战技巧】系列(四):从执行计划讨论UNION ALL与空字符串UNION与OR的使用注意事项 【SQL开发实战技巧】系列

    2023年04月09日
    浏览(51)
  • 二维码地址门牌管理系统:预约安全、智能生活

    二维码地址门牌管理系统的出现不仅提升了小区的安全性,还为访客提供了更便捷的预约服务,让亲朋好友轻松进入小区。 该系统提供了访客预约功能,业主可为访客填写信息并提交审核。经审核通过后,访客可凭借人脸识别开启大门和门禁卡口,提供了智慧小区的安全与便

    2024年01月23日
    浏览(42)
  • 二维码地址门牌管理系统:智慧城市新篇章

    随着科技的飞速发展,城市的智能化已成不可逆转的趋势。二维码地址门牌管理系统作为新一代门牌管理系统,融合独特功能与先进技术,引领着智慧城市建设。系统不仅满足市民门牌信息管理需求,更以高效便捷的城市管理助力智慧城市的发展。 系统特有的轮播广告位功能

    2024年01月23日
    浏览(46)
  • ORM 自定义sql,where条件变量值为null,转为:where remark=null是不对的

    ORM 自定义sql,where条件变量值为null,转为:where remark=null是不对的 该如何解决呢? 例子如下: 需要在变量的值为null时,改为: remark is null 这是SQL的语法. 使用ORM自定义sql, 在where条件,使用remark=#{remark @toIsNULL1}才是对的. 代码参考: https://gitee.com/automvc/bee-exam Bee,一个简单易用,功能强大的

    2024年02月12日
    浏览(57)
  • SQL SEVER连线查询数据源IP地址及开启SQL的IP地址连线方法

    一般来说本机可以直接 主机名 (例如自己命令LILEI)或者 Localhost, 以及数据库管理器可以只用 . 即可登入,或者 IP地址 。 未设定本机地址说明 已设定本机地址说明 故连接需要“ 服务端IP地址 ” 或 “ @@SERVERNAME ” 4.2 计算机管理-服务和应用程序-SQL配置管理器-SQL网络配置

    2024年02月09日
    浏览(46)
  • 【SQL开发实战技巧】系列(三):SQL排序的那些事

    【SQL开发实战技巧】系列(一):关于SQL不得不说的那些事 【SQL开发实战技巧】系列(二):简单单表查询 【SQL开发实战技巧】系列(三):SQL排序的那些事 【SQL开发实战技巧】系列(四):从执行计划讨论UNION ALL与空字符串UNION与OR的使用注意事项 【SQL开发实战技巧】系列

    2024年02月03日
    浏览(42)
  • SQL Server2008下载地址

    SQL Server2008下载地址 https://www.microsoft.com/zh-CN/download/details.aspx?id=30438 版本说明 Microsoft SQL Server 2008 R2 Express Service Pack 2 是功能丰富的 SQL Server 免费版本,是学习、开发桌面、Web 及小型服务器应用程序并为它们提供功能的理想选择,且非常适合由 ISV 进行再分发。 SQL Server 2008

    2024年02月10日
    浏览(39)
  • SQl排序与分页

    1.1 排序规则 使用 ORDER BY 子句排序 ASC(ascend): 升序 DESC(descend):降序 ORDER BY 子句在SELECT语句的结尾。 1.2 单列排序 默认升序排列 1.3 多列排序 可以使用不在 SELECT 列表中的列排序。 在对多列进行排序的时候,首先排序的第一列必须有相同的列值,才会对第二列进行排序。

    2024年02月13日
    浏览(44)
  • SQL—排序专用窗口函数

    下面介绍三种用于进行排序的专用窗口函数: 1、RANK()     在计算排序时,若存在相同位次,会跳过之后的位次。     例如,有3条排在第1位时,排序为:1,1,1,4······ 2、DENSE_RANK()     这就是题目中所用到的函数,在计算排序时,若存在相同位次,不会跳过之后的位

    2024年01月22日
    浏览(48)
  • sql 2019 for windows 下载地址

    SQL Server 2019 for Windows 的下载地址是: 官方下载地址:https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 下载地址: https://www.microsoft.com/zh-cn/sql-server/sql-server-editions-developers https://www.microsoft.com/zh-cn/sql-server/sql-server-trial 注意:如果你是在中国地区下载,你可能会遇到下载速度慢

    2024年02月06日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包