mysql中判断字段是否包含数字或者是否为纯数字

mysql中判断字段是否包含数字或者是否为纯数字

目录

各种场景

1.判断字段是否包含数字 [但是这个我实际执行没有任何反应,百度也没有收到,可是实际工作中确实看到数据库中有人是这样写的,很奇怪]
2.使用like模糊查询包含某个数字
3.使用mysql原生函数FIND_IN_SET查询包含某个数字
4.使用regexp正则匹配纯数字
5.使用regexp正则匹配字段值不包含数字

1.判断字段是否包含数字

 name like '%[0-9]%';

2.使用like模糊查询包含某个数字

select * from table where name like '%1%';

3.使用mysql原生函数FIND_IN_SET查询包含某个数字

select * from table where find_in_set(1, 字段 );
FIND_IN_SET(str,strlist)

str 要查询的字符串
strlist 字段名 参数以”,”分隔 如 (1,2,6,8)
查询字段(strlist)中包含(str)的结果,返回结果为null或记录

假如字符串str在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。
 一个字符串列表就是一个由一些被 ‘,’ 符号分开的子链组成的字符串。如果第一个参数是一个常数字符串,
而第二个是type SET列,则FIND_IN_SET() 函数被优化,使用比特计算。 如果str不在strlist 或strlist 为空字符串,则返回值为 0 。
如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(,)时将无法正常运行。
注意:
select * from treenodes where FIND_IN_SET(id, '1,2,3,4,5');
使用find_in_set函数一次返回多条记录
id 是一个表的字段,然后每条记录分别是id等于12345的时候
有点类似in (集合)
select * from treenodes where id in (1,2,3,4,5);

4.使用regexp正则匹配纯数字

select * from  table where (name regexp '[^0-9.]')=0;SELECT666REGEXP[^0-9.]’ 结果为 0 ,代表为纯数字
当 SELECT6hhhhh” REGEXP[^0-9.]’ 时, 结果为1 ,代表不为纯数字

5.使用regexp正则匹配字段值不包含数字

select * from table where 字段 not regexp '[0-9]+';
<think>嗯,用户问的是如何在MySQL中查询某个字段为空的记录。我需要先回顾一下相关的知识。根据之前看的引用资料,MySQL处理空值有不同的情况,特别是字段类型不同,查询方式可能不一样。 首先,用户提到的引用[1]指出,当字段是varchar类型时,空值可能用空字符串''表示,这时候应该用where 字段 = ''来查空,用where 字段 <> ''查非空。而数字类型的字段可能需要用ISNULL(字段)函数。引用[4]也提到使用isNull(column1)来正确查询字段是否为NULL的情况,并且指出直接使用column1=null是错的,因为NULL在SQL中需要用IS NULL来判断。 所以,总结起来,可能需要分情况讨论:字段是否为NULL或者空字符串。如果字段允许存储NULL和空字符串,可能需要同时检查两种情况。比如,字段为varchar时,空记录可能是NULL或者'',所以查询条件应该是字段 IS NULL OR 字段 = ''。不过根据引用[1],当字段是varchar时,空记录可能直接存为'',这时候用where 字段 = ''即可。而如果是数字类型,可能存的是NULL,所以用ISNULL(字段)。 用户可能混淆了NULL和空字符串的区别。需要明确说明不同的字段类型对应的查询方法。比如,字符类型和数字类型的处理方式不同,同时还要注意MySQL版本的影响,比如引用[3]提到在5.6版本插入空字符串到某些字段会报错,但5.1可以。 因此,正确的步骤应该是: 1. 确定字段类型。 2. 根据类型选择正确的查询条件,字符类型用= ''或者<> '',而NULL值需要用IS NULL或IS NOT NULL。 3. 注意字段是否同时包含NULL和空字符串的情况,可能需要组合条件。 另外,需要提醒用户注意MySQL版本差异,以及不同上下文下空值的处理可能不同。比如引用[2]提到TimesTamp类型字段插入空值可能表现不同,这可能影响查询结果。 最后,给出示例SQL语句,帮助用户具体操作。比如: - 字符类型:SELECT * FROM table WHERE column = '' OR column IS NULL; - 数字类型:SELECT * FROM table WHERE ISNULL(column); 同时,需要指出常见的错误,比如直接使用column = NULL是无效的,必须用IS NULL。还要提到COALESCE函数的使用,可能帮助处理多条件情况。</think>在MySQL中查询字段为空的记录需要根据字段类型和存储内容选择正确的查询方法: ### 一、查询空值的两种场景 1. **字符类型字段**(如`VARCHAR`/`CHAR`) - 查询空字符串:`WHERE 字段 = ''` - 查询NULL值:`WHERE 字段 IS NULL` - 同时查询空字符串和NULL值: ```sql SELECT * FROM 表名 WHERE 字段 = '' OR 字段 IS NULL ``` 2. **数字类型字段**(如`INT`/`FLOAT`) - 查询空值必须使用:`WHERE ISNULL(字段)` 或 `WHERE 字段 IS NULL` ### 二、错误用法示例 ```sql SELECT * FROM users WHERE phone = null; -- 错误,无法返回结果 SELECT * FROM users WHERE phone = 'null'; -- 错误,会匹配字符串'null' ``` ### 三、优化建议 使用`COALESCE()`函数处理混合空值: ```sql SELECT * FROM orders WHERE COALESCE(备注字段, '') = '' -- 同时匹配NULL和空字符串 ``` ### 四、不同版本注意事项 - MySQL 5.6及以上版本对空字符串插入有更严格的校验[^3] - 时间类型字段的空值判断需特别注意字段默认值设置[^2]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小瞿码上有

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值