zoukankan      html  css  js  c++  java
  • 【MySQL】拆分经纬度字段

    数据结构:

    表中一字段存储经度和纬度:

    +---------------------------+
    | INSTALL_LOLA_NUM          |
    +---------------------------+
    | 23.0345735213,69.01224234 |
    | 23.0340313,69.01224234    |
    | 93.03453,69.01224234      |
    | 10.23683,69.01224234      |
    | 43.0345123,69.01224234    |
    +---------------------------+

    查询时,将其拆分成两个字段,经度和纬度

    SQL解决办法:

    使用 INSTR + RIGHT + LEFT + LENGTH 函数组合

    SELECT 
        COL, -- 原始字段
        INSTR(COL, ',') AS IDX, --  逗号下标
        LEFT(COL, INSTR(COL, ',') - 1) AS LEFT_CUT, -- 左切部分
        RIGHT(COL, LENGTH(COL) - INSTR(COL, ',')) AS RIGHT_CUT -- 右切部分
    FROM TABLE

    案例效果:

    +---------------------------+-----+---------------+-------------+
    | C                         | IDX | LEFT_CUT      | RIGHT_CUT   |
    +---------------------------+-----+---------------+-------------+
    | 23.0345735213,69.01224234 |  14 | 23.0345735213 | 69.01224234 |
    | 23.0340313,69.01224234    |  11 | 23.0340313    | 69.01224234 |
    | 93.03453,69.01224234      |   9 | 93.03453      | 69.01224234 |
    | 10.23683,69.01224234      |   9 | 10.23683      | 69.01224234 |
    | 43.0345123,69.01224234    |  11 | 43.0345123    | 69.01224234 |
    | 6                         |   0 |               | 6           |
    | 7                         |   0 |               | 7           |
    | 8                         |   0 |               | 8           |
    | 9                         |   0 |               | 9           |
    | 10                        |   0 |               | 10          |
    | 11                        |   0 |               | 11          |
    | 12                        |   0 |               | 12          |
    | 13                        |   0 |               | 13          |
    | 14                        |   0 |               | 14          |
    | 15                        |   0 |               | 15          |
    | 16                        |   0 |               | 16          |
    | 17                        |   0 |               | 17          |
    | 18                        |   0 |               | 18          |
    | 19                        |   0 |               | 19          |
    | 20                        |   0 |               | 20          |
    | 21                        |   0 |               | 21          |
    | 22                        |   0 |               | 22          |
    | 23                        |   0 |               | 23          |
    | 24                        |   0 |               | 24          |
    +---------------------------+-----+---------------+-------------+

    发现新的问题,右切会全切,在加一个判断,左切的判断

    SELECT 
        C,
        INSTR(C, ',') AS IDX,
        LEFT(C, INSTR(C, ',') - 1) AS LEFT_CUT,
        IF(LEFT(C, INSTR(C, ',') - 1) , RIGHT(C, LENGTH(C) - INSTR(C, ',')), '') AS RIGHT_CUT
    FROM A

    效果:

    +---------------------------+-----+---------------+-------------+
    | C                         | IDX | LEFT_CUT      | RIGHT_CUT   |
    +---------------------------+-----+---------------+-------------+
    | 23.0345735213,69.01224234 |  14 | 23.0345735213 | 69.01224234 |
    | 23.0340313,69.01224234    |  11 | 23.0340313    | 69.01224234 |
    | 93.03453,69.01224234      |   9 | 93.03453      | 69.01224234 |
    | 10.23683,69.01224234      |   9 | 10.23683      | 69.01224234 |
    | 43.0345123,69.01224234    |  11 | 43.0345123    | 69.01224234 |
    | 6                         |   0 |               |             |
    | 7                         |   0 |               |             |
    | 8                         |   0 |               |             |
    | 9                         |   0 |               |             |
    | 10                        |   0 |               |             |
    | 11                        |   0 |               |             |
    | 12                        |   0 |               |             |
    | 13                        |   0 |               |             |
    | 14                        |   0 |               |             |
    | 15                        |   0 |               |             |
    | 16                        |   0 |               |             |
    | 17                        |   0 |               |             |
    | 18                        |   0 |               |             |
    | 19                        |   0 |               |             |
    | 20                        |   0 |               |             |
    | 21                        |   0 |               |             |
    | 22                        |   0 |               |             |
    | 23                        |   0 |               |             |
    | 24                        |   0 |               |             |
    +---------------------------+-----+---------------+-------------+

    解决方案参考此博客:

    https://www.cnblogs.com/liyue-sqsf/p/9077249.html

    同样,使用LEFT + RIGHT 函数 可以实现 电话号脱敏

    set @phone = 13566778899;
    
    select case 
    when length(@phone) = 11 then 
    concat(left(@phone,3),'****',right(@phone,4))
    else @phone end as phone;
  • 相关阅读:
    基于Typescript和Jest刷题环境搭建与使用
    一些惊艳到我的运维实施技巧和思路
    Zabbix 5.0:监控MySQL出现的问题
    Linux防火墙IPtables配置策略思路
    聊聊二维码
    如何创建SQLite数据库
    PLC工程师学会编程,是一种什么样的体验?
    让你的上位机程序独占鳌头
    使用delve调试golang
    指纹登录是怎么跑起来的
  • 原文地址:https://www.cnblogs.com/mindzone/p/15692993.html
Copyright © 2011-2022 走看看