【MySQL】

您所在的位置:网站首页 mysql查询空值返回结果为空 【MySQL】

【MySQL】

2024-07-09 11:59| 来源: 网络整理| 查看: 265

目录

背景知识

SQL语句分析

改进后的SQL语句

知识扩展

注意事项

技术是为业务服务的, 先不管什么奇怪的需求, 先技术实现它... 背景知识

在数据库中,有时需要生成具有特定格式的唯一ID。例如,这里的ID由当前日期(格式为yyyymmdd)和一个顺序号(四位数)组成。每当需要添加新的记录时,就要生成一个新的ID,该ID比当天已有的最大ID大1。

SQL语句分析

原始的SQL语句试图获取当天最大的ID,然后将其加1以生成新的ID。如果当天没有ID,就默认使用'0001'作为顺序号。

公司表获取最大ID且加1: ID示例:yyyymmdd+0001 SELECT IFNULL(RIGHT(ac.id + 1, 4), '0001') numMax FROM app_company ac WHERE LEFT(ac.id, 8) = DATE_FORMAT(now(), '%Y%m%d') ORDER BY RIGHT(ac.id, 4) DESC LIMIT 1

这个查询有几个问题:

IFNULL函数不会处理非NULL的“无效”值(如'N/A')。在没有任何记录的情况下,RIGHT(ac.id + 1, 4)将不会返回任何结果,因此IFNULL将返回'0001'。使用ORDER BY和LIMIT来获取最大值效率较低。 改进后的SQL语句

改进后的SQL语句使用MAX函数来找出当天最大的ID,然后通过IFNULL处理当天没有任何ID的情况。这样就不需要ORDER BY和LIMIT子句,因为MAX函数已经能够找到最大的ID。

SELECT IFNULL(MAX(RIGHT(ac.id, 4)) + 1, '0001') numMax FROM app_company ac WHERE LEFT(ac.id, 8) = DATE_FORMAT(now(), '%Y%m%d') 知识扩展 IFNULL: MySQL中的IFNULL函数用来检查第一个表达式是否为NULL,如果是,就返回第二个参数的值。MAX: MAX函数返回一组值中的最大值,如果集合为空,则返回NULL。RIGHT: RIGHT函数从字符串的右侧返回指定数量的字符。LEFT: LEFT函数从字符串的左侧返回指定数量的字符。DATE_FORMAT: DATE_FORMAT函数用于格式化日期值。 注意事项

在实际使用中,直接在数据库层面进行ID的生成可能会有并发问题,特别是在高并发的环境下。为了确保ID的唯一性和顺序,可能需要采用其他机制,比如应用层的锁或者使用数据库的序列(在MySQL 8.0+中为AUTO_INCREMENT属性)。

此外,如果ac.id是字符型字段,直接进行+ 1操作可能会导致错误,因为字符型和数值型的操作不同。在这种情况下,可能需要先将ID的顺序号部分转换为数值型,进行加法操作后再转换回字符型。

有用请点赞,养成良好习惯!

疑问、交流、鼓励请留言!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3