前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL 获取纯数值的行

SQL 获取纯数值的行

作者头像
白日梦想家
发布2020-11-26 11:08:31
1.6K0
发布2020-11-26 11:08:31
举报
文章被收录于专栏:SQL实现SQL实现

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

代码语言:javascript
复制
v       
--------
123     
abc     
1d3     
0       
123.0   
0123    
0#123   
0$123   

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

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

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

代码语言:javascript
复制
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 做正则表达式匹配。

代码语言:javascript
复制
SELECT * FROM mix WHERE v REGEXP '^[0-9]+$';


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

REGEXPREPLACE 的写法简洁很多。

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

代码语言:javascript
复制
SELECT * FROM mix WHERE v REGEXP '^[0-9]*[.]?[0-9]+$';


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

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

代码语言:javascript
复制
SELECT * FROM mix WHERE v REGEXP '^[-+]?[0-9]*[.]?[0-9]+$';
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SQL实现 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档