当前位置: 首页 > article >正文

sql中奇数、偶数、正则

在sql中,mod()和%都是用来取余的操作符。在很多 SQL 实现中,它们可以互换使用,都可以用来计算一个数除以另一个数的余数。

方法一:使用mod()

mod(a,b) 在sql中的意思是 a / b 的余数

mod(id, 2)=1 是指id是奇数。

mod(id, 2)=0 是指id是偶数。

select * from employees where mod(emp_no,2) = 1 
and 
last_name <> 'Mary' 
order by hire_date desc;

方法二:使用%

如id是奇数:(id % 2) = 1;

id是偶数:(id % 2) = 0;

select * from employees where emp_no % 2 = 1 
and 
last_name <> 'Mary' 
order by hire_date desc;

方法三:使用&

在 SQL 中,& 是按位与运算符,它用于执行按位与操作。按位与操作会将两个数的每个对应位进行比较,如果两个对应位都为 1,则结果位为 1,否则结果位为 0。

& 操作符可以用来判断一个数是奇数还是偶数。

在二进制表示中,奇数的最低位(最右边的位)是1,偶数的最低位是0。因此,如果一个数是奇数,那么它的二进制表示的最低位为1;如果一个数是偶数,那么它的二进制表示的最低位为0。

通过使用按位与操作符 &,你可以检查一个数的最低位是1还是0。如果最低位是1,则这个数是奇数;如果最低位是0,则这个数是偶数。

如id是奇数:(id & 1) = 1;

id是偶数:(id & 1) = 0;

select * from employees where emp_no & 1 = 1 
and 
last_name <> 'Mary' 
order by hire_date desc;

方法四: id = (id >> 1 << 1)?

判断偶数也可以用如 id = (id >> 1 << 1),先除2向下取整,再乘以2,和原来的值相等就是偶数,不等就是奇数。id >> 1 是进行位操作,id的二进制向右移动一位,右移一位相当于除以2向下取整,<< 1 表示将上一步结果向左移动一位,左移一位相当于乘以2 。比如:

假设 id 的初始值是 5:

  1. id >> 1:将 5(101) 右移一位得到 2(10)。
  2. 2 << 1:将 2(10) 左移一位得到 4(100)。

上面的方法只能判断全是数字的情况

比如查询身份证号是以奇数结尾和以偶数结尾的问题可以使用上述办法,但如果数字中出现其他字符,比如:身份证号码中间用*号隐藏了一部分,

130185******184112

330621******224665

422822******054037

就不能用上面的方法判断了,这时候可以使用正则表达式。

查询偶数

select idcard from user_info a where a.idcard regexp '[13579]$' limit 5;

查询奇数

select idcard from user_info a where a.idcard regexp '[02468]$' limit 5;

正则表达式:

^aa:以aa为开头

aa$:以aa为结尾

[abc]:[字符合集],包括中括号里的字符

[^abc]:不包括中括号里是字符

a|b|c:匹配a或b或c

. :匹配任何字符

{n} :n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o;

{n,m} :m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。

*   :匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,};

+  :匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,};

比如:查找name字段中以元音字符开头或以'ok'字符串结尾的所有数据:

SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';


http://www.kler.cn/a/532571.html

相关文章:

  • 1. 【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--前言
  • 【论文复现】粘菌算法在最优经济排放调度中的发展与应用
  • mysql运维
  • 84-《金银花》
  • CSS 背景与边框:从基础到高级应用
  • Linux防火墙基础
  • 【L2JMobius】ZGC requires Windows version 1803 or later
  • 宝塔面板端口转发其它端口至MySQL的3306
  • 关于大模型 AGI 应知应会_生在AI发展的时代
  • 51单片机入门_05_LED闪烁(常用的延时方法:软件延时、定时器延时;while循环;unsigned char 可以表示的数字是0~255)
  • 统计满足条件的4位数(信息学奥赛一本通-1077)
  • 【通俗易懂说模型】线性回归(附深度学习、机器学习发展史)
  • 高斯过程处理大型数据集时返回值为 0 的问题
  • Spring Cloud工程搭建
  • 中继器与集线器
  • 用deepseek制作我的第一个长视频---使用AI解决尝试新领域没有经验拖延的问题!
  • 在Mac mini M4上部署DeepSeek R1本地大模型
  • Linux下使用C++设计线程池
  • 路由表转发表考研知识点
  • 强化学习驱动的自适应模型选择与融合用于监督学习
  • 蓝桥杯刷题 DAY4:小根堆 区间合并+二分
  • 体会SHAP分析局部解释在预测模型实践中的意义
  • 分享|LLM通过D-E-P-S完成长时间与多步骤的任务
  • idea隐藏无关文件
  • 炒股-基本面分析
  • 基于联合概率密度与深度优化的反潜航空深弹命中概率模型研究摘要