写点什么

MySql 过滤查询(以字母开头,以数字开头,非数字开头,非字母开头)

作者:迷彩
  • 2022 年 6 月 21 日
  • 本文字数:880 字

    阅读完需:约 3 分钟

我们知道,SQL Server 中判断一个字段的值是否为数字可以用系统自带的 ISNUMERIC()函数来处理,但是 MySQL 数据库中则没有这个(或者是没有一个直接判断是否是数字)的函数,但 MySQL 为我们提供了正则表达式的函数,所以我们可以用数字的正则表达式来处理有关判断字段值是否是数字的问题,具体的 MySQL 语句代码示例如下:

SELECT * FROM TABLE_NAME WHERE COLUMN_NAME REGEXP '^[0-9]+$'

下面我们来看下实例:

-- 不是以数字开头select * from mot_terms where `name` not REGEXP '^[0-9]' -- 不是以字母开头select * from mot_terms where `name` not REGEXP '^[a-zA-Z]' 

-- 已数字和特殊字符开头select * from mot_terms where `name` REGEXP '^[@#$%&0-9]'
复制代码

一、mysql 判断是不是数字

SELECT '1.1' REGEXP '[0-9.]'
复制代码

结果为 1 表示 true 当然也可以使用SELECT '1.1' REGEXP '[^0-9.]',结果为 0 表示 false。 二、mysql 判断是不是包含字母

SELECT '1AA' REGEXP '[a-z]'
复制代码


结果为 1 表示 true,此情况不区分英文大小写,若区分大小写可使用SELECT '1AA' REGEXP BINARY '[a-z]',结果为 0 表示 false。

SELECT * FROM `v9_category_attribute` WHERE title_cn REGEXP BINARY  '[A-Z]';

BINARY  强制区分大小写

REGEXP 正则表达式

实例:

mysql> create table test (name varchar(64));Query OK, 0 rows affected (0.04 sec)
mysql> insert into test set name = 'taoge';Query OK, 1 row affected (0.03 sec)
mysql> select * from test;+-------+| name |+-------+| taoge |+-------+1 row in set (0.00 sec)
mysql> select * from test where name = 'TAOGE';+-------+| name |+-------+| taoge |+-------+1 row in set (0.00 sec)
mysql> select * from test where name = 'taoge';+-------+| name |+-------+| taoge |+-------+1 row in set (0.00 sec)
mysql> select * from test where binary name = 'TAOGE';Empty set (0.00 sec)
mysql> select * from test where binary name = 'taoge';+-------+| name |+-------+| taoge |+-------+1 row in set (0.00 sec)
mysql>
复制代码


发布于: 35 分钟前阅读数: 5
用户头像

迷彩

关注

我的工作是常年写bug|公众号:互联网有啥事 2020.06.18 加入

修bug的菜鸟~公众号:互联网有啥事

评论

发布
暂无评论
MySql 过滤查询(以字母开头,以数字开头,非数字开头,非字母开头)_数据库_迷彩_InfoQ写作社区