专栏首页SQL实现SQL 获取纯数值的行

SQL 获取纯数值的行

在 MySQL 库中有个 mix 表,它有一个列叫作 v,该列存储了文本和纯数值的内容。部分数据如下:

v       
--------
123     
abc     
1d3     
0       
123.0   
0123    
0#123   
0$123   

希望使用 SQL 获取到只包含了数值的行。

由于 MySQL 并没有像 SQL Server 那样提供了ISNUMERIC() 函数判断内容是否是数值,我们只能使用曲线救国的方式解决了。

如果不考虑浮点数,可以把文本中的数字全部去掉,再判断剩下的内容的长度是否为 0 ,长度为 0 就说明是数值,否则是文本。

SELECT 
  * 
FROM
  mix 
WHERE LENGTH(
    REPLACE(
      REPLACE(
        REPLACE(
          REPLACE(
            REPLACE(
              REPLACE(
                REPLACE(
                  REPLACE(
                    REPLACE(
                      REPLACE(v, '0', ''), 
                      '1',
                      ''
                    ),
                    '2',
                    ''
                  ),
                  '3',
                  ''
                ),
                4,
                ''
              ),
              5,
              ''
            ),
            6,
            ''
          ),
          7,
          ''
        ),
        8,
        ''
      ),
      9,
      ''
    )
  ) = 0 
  

v       
--------
123     
0       
0123    

上面这个SQL看着挺吓人的,在 MySQL 里没有 translate() 函数,就只能用 replace() 将 0 - 9 的数字逐个替换掉。

好在 MySQL 中支持使用正则表达式,可以使用 REGEXP 做正则表达式匹配。

SELECT * FROM mix WHERE v REGEXP '^[0-9]+$';


v       
--------
123     
0       
0123    

REGEXPREPLACE 的写法简洁很多。

如果要考虑浮点数,我们还可以把正则表达式变得更丰富点。

SELECT * FROM mix WHERE v REGEXP '^[0-9]*[.]?[0-9]+$';


v       
--------
123     
0       
123.0   
0123    

假如还要支持查到带有“+”或者“-”的数值,正则表达式也能够做到。

SELECT * FROM mix WHERE v REGEXP '^[-+]?[0-9]*[.]?[0-9]+$';

本文分享自微信公众号 - SQL实现(gh_684ee9235a26),作者:zero

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-11-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SQL 获取一行中多个字段的最大值

    在 chaos(id,v1,v2,v3) 表中获取每个 id 对应的 v1、v2、v3 字段的最大值,v1、v2、v3 同为数值类型。

    白日梦想家
  • Listview获取选中行的值

    一般情况请注意别先删除了选中行,又去使用。那就会导致找不到选中行。。。。。哥犯了这个错误。。。找了很长时间问题

    跟着阿笨一起玩NET
  • 完整获取SQL的执行计划

    获取SQL执行计划的方式很多,最多使用的是在PL/SQL中的快捷方式F5,但这个执行计划信息量少,而且如果需要发送给别人分析,还需要通过截图方式分享信息。 倘若...

    企鹅号小编
  • [javaSE] 数组(获取最值)

    1.获取最值需要进行比较,每一次比较都会有一个较大的值,因为该值不确定,通过一个变量进行存储

    陶士涵
  • JS 获取URL中的参数值

    本文由 Alone88 创作,采用 知识共享署名4.0 国际许可协议进行许可 本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名 最后编辑时间为...

    Alone88
  • Thymeleaf 获取model中的值和JS获取Model中的数据

    1:Thymeleaf 获取model中的值 访问model中的数据 //通过“${}”访问model中的属性

    王小婷
  • SQL语句执行与结果集的获取

    title: SQL语句执行与结果集的获取 tags: [OLEDB, 数据库编程, VC++, 数据库] date: 2018-01-28 09:22:1...

    Masimaro
  • sql server 获取每一个类别中值最大的一条数据

    数据如下: name val memo a 2 a2(a的第二个值) a 1 a1--a的第一个值 a 3 a3:a的第三...

    java达人
  • sql server 获取每一个类别中值最大的一条数据

    SELECT  * FROM    (           SELECT    * ,                     ROW_NUMBER() OVE...

    跟着阿笨一起玩NET
  • 获取listbox中的值

    List<string> list=new List<string>();             for (int i = 0; i < lbLog.Ite...

  • Python获取数字的二进制值

    Convert an integer number to a binary string prefixed with “0b”. The result is a...

    大江小浪
  • php不用数组获取checkbox的值

    黄啊码
  • js获取数组中的最大值最小值

    deepcc
  • js 获取url 传值 参数

    ``` {.brush:html;toolbar: .true; .auto-links: .false;} <script language="JavaSc...

    明哥的运维笔记
  • SQL 运行时性能统计信息的获取

    打个招呼,这一篇可能不适合 CRUD Boy/Girl. 纯做增删改查的 SQL 编码师可能会觉得偏难。

    Lenis
  • jquery获取表单数据方法$.serializeArray()获取不到disabled的值

    蓓蕾心晴
  • JavaScript 获取 url 上的指定参数值

    假设现在有 A 和 B 两个页面,当我们从 A 页面跳转到 B 页面的时候,需要将 A 页面的两个值传递到 B 页面当中,前端可以通过读取缓存的方式,从 B 页...

    Nian糕
  • CTF| SQL注入之获取数据类

    上周发了一篇 SQL注入登录类的题型文章分析,这种题目一般是绕过登录限制。常规的SQL注入题需要我们一步步注入出数据,大部分题目需要我们有一定代码审计的能力,分...

    漏斗社区
  • 《收获,不止SQL优化》 - 获取执行计划的方法对比

    曾经写过关于如何得到Oracle执行计划的文章,《一个执行计划异常变更的案例 - 外传之查询执行计划的几种方法》,其中介绍了各种能得到SQL执行计划的方法,梁老...

    bisal

扫码关注云+社区

领取腾讯云代金券