MySQL中常见的函数以及常见的问题汇总
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容介绍了"MySQL中常见的函数以及常见的问题汇总"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成
千家信息网最后更新 2026年11月03日MySQL中常见的函数以及常见的问题汇总
本篇内容介绍了"MySQL中常见的函数以及常见的问题汇总"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
MySQL中常见的函数:
if语句: 格式:IF(Condition,A,B) 说明:当Condition为TRUE时,返回A;当Condition为FALSE时,返回B。case when语句: 举例: SELECT t.message_id,t.title, CASE WHEN TO_DAYS(t.date)= TO_DAYS(NOW()) THEN '今天' WHEN TO_DAYS(t.date)= (TO_DAYS(NOW())-1) THEN '昨天' ELSE date_format(t.date,'%Y-%m-%d') END AS datestr FROM t_message t 字符串截取/连接函数: CONCAT函数: 格式: CONCAT(columnName1,columnName2,'otherString') 说明:返回一个字符串结果,该结果由参数中的值连接(不使用分隔符)而成,如果某一个参数为NULL ,则返回值为NULL。 GROUP_CONCAT函数: 格式: GROUP_CONCAT(columnName) GROUP_CONCAT(columnName SEPARATOR ';') 说明:返回一个字符串结果,该结果由分组中的(columnName列的)值用分隔符(默认为英文逗号)拼接而成。 RIGHT函数 格式:right(str, length) 说明:返回字符串str最右面的length个字符。 INSTR函数 格式:INSTR(str,substr) 说明:返回子串substr在字符串str中第一个出现的位置,位置从1开始计算。若在str中找不到substr则返回0。 补充: LOCATE(substr,str,pos):返回子串substr在字符串str中从pos开始第一个出现的位置。如果substr不是在str里面,返回0。 SUBSTRING函数 格式:substring(str, pos, length); 说明:截取字符串。从pos开始,截取length长度。 字符串替换函数: 举例:将content字段值中的'{URL}'替换为download_url字段的值。 select t.id, t.title, replace(content,'{URL}',t.download_url) from t_helpcenter t 时间函数: 函数: NOW() eg:2018-03-19 19:18:55 CURDATE() eg:2018-03-19 DATE_SUB(CURDATE(), INTERVAL 7 day) eg:若今天是2018-03-19,则结果为2018-03-12 DATE_SUB(CURDATE(), INTERVAL 1 week) eg:若今天是2018-03-19,则结果为2018-03-12 DATE_SUB(CURDATE(), INTERVAL 1 month) eg:若今天是2018-03-19,则结果为2018-02-19 DATE_SUB(CURDATE(), INTERVAL 1 year) eg:若今天是2018-03-19,则结果为2017-03-19 DATE_FORMAT(CURDATE(), '%Y%m') eg:201803 quarter(NOW()) eg:若今天是2018-03-19(3月属于第1季度),则结果为1 year(NOW()) eg:2018 举例: 今天: SELECT * FROM t_advertise_message WHERE TO_DAYS(update_time) = TO_DAYS(NOW()) 昨天: SELECT * FROM t_advertise_message WHERE TO_DAYS(update_time) = TO_DAYS(NOW()) -1 7天内: SELECT * FROM t_advertise_message WHERE DATE(update_time) >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) 本月: SELECT * FROM t_advertise_message WHERE DATE_FORMAT(update_time,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m') 本季度:SELECT * FROM t_advertise_message WHERE quarter(update_time) = quarter(NOW()) 本年度:SELECT * FROM t_advertise_message WHERE year(update_time) = year(NOW()) 将字符串转换为时间的函数: str_to_date('2000-05-24 14:00:00', '%Y-%m-%d %H:%i:%s')MySQL中常见的问题:
1)MySQL关于查询条件中:字符串类型的值忽略英文字母的大小写以及字符串尾部包含空格的问题 举例:MySQL中执行下面3条查询语句,查询出来的结果完全相同。 SELECT * FROM t_accounts WHERE account= "xiaoning" SELECT * FROM t_accounts WHERE account= "XiaoNing" SELECT * FROM t_accounts WHERE account= "xiaoning " 分析: 1)MySQL对CHAR或VARCHAR类型的值进行比较(=)时,会忽略字符串中英文字母的大小写以及尾部的空格 2)对CHAR和VARCHAR类型的值进行LIKE查询时,会忽略英文字母的大小写,但是不会忽略字符串尾部的空格 解决方案: SELECT * FROM t_accounts WHERE account= BINARY "xiaoning" 或 SELECT * FROM t_accounts WHERE BINARY account= "xiaoning" SELECT * FROM t_accounts WHERE account= BINARY "XiaoNing" 或 SELECT * FROM t_accounts WHERE BINARY account= "XiaoNing" SELECT * FROM t_accounts WHERE account= BINARY "xiaoning " 或 SELECT * FROM t_accounts WHERE BINARY account= "xiaoning " 说明: 1>BINARY不是函数,是类型转换运算符 2>BINARY强制将后面的字符串转换为一个二进制的字符串,可以理解为在字符串比较的时候区分英文字母的大小写以及空格,即精确匹配。 2)对varchar类型的字段和数字进行比较时,mysql会把varchar转换为数字: 举例: 当varchar类型字段的首字符为非数字时(eg:asdf),该字段会被转换为数字0; 当varchar类型字段的首字符为数字0时(eg:0abcd),该字段会被转换为数字0; eg:varchar类型字段=0 只能排除首字符为非数字0的字符串 同理:varchar类型字段=1 只能排除首字符为非数字1的字符串 3)在MySQL客户端中查看MySQL的安装目录: SELECT @@basedir AS MySqlDir FROM DUAL 4)MySQL中存储超长字符串: MySQL中字段的类型设为:MEDIUMTEXT Mybatis中对应的类型为:JdbcType.LONGVARCHAR
其它:
replace into语句: 原理: replace into语句首先会判断表中是否已经存在该行数据(根据主键或唯一索引来判断),如果该行数据已存在,则删除已存在的该行数据并插入新的数据;如果该行数据不存在,则直接将数据插入。 注意: 插入数据的表必须有主键或唯一索引,否则replace into语句会直接将数据插入到表中,从而可能导致表中出现重复的数据。 如果要插入的数据已存在,那么,replace into语句的返回值为2 (受影响的行数为2) 举例: DDL: CREATE TABLE `t_site_id` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `unique_column` varchar(1) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `unique_column` (`unique_column`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; 说明: 1>t_site_id表有两列:id、unique_column,表中只有一条数据:id=1,unique_column="a" 2>执行:replace into t_site_id set unique_column="a" 后,表中的数据变成了:id=2,unique_column="a" 3>在mybatis中执行replace into语句后,可以使用@SelectKey注解来获取到自增后最新的id,从而我们可以获取到一个全局唯一(且递增)的id。 代码: @Insert({"replace into t_site_id set unique_column='a'" }) @SelectKey(before = false, keyProperty = "id", resultType = Long.class, statementType = StatementType.STATEMENT, statement = "SELECT LAST_INSERT_ID() ") public Long getNewSiteId(ReqAddSite req);"MySQL中常见的函数以及常见的问题汇总"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
字符
字符串
函数
数据
类型
字段
结果
数字
语句
常见
格式
问题
大小
字母
空格
首字
英文
查询
位置
尾部
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技行业发展
疫情对互联网科技公司影响
科技互联网技术
远拓互联网科技
深圳齐家互联网科技
天津摩尔互联网科技
无线互联网科技
互联网金融科技委员会
互联网科技大会案例
丰台科技园 互联网公司
互联网科技热点资讯
移动互联网科技公司
互联网科技研发水平
深圳艾果互联网通讯科技
为客找房互联网科技公司怎么样
世界互联网科技成果奖
科技互联网专业工作会议发言稿
恒生科技互联网指数十大成分股
高科技和互联网的现代国家
中国主要互联网科技公司
百单网互联网科技有限公司怎么样
互联网科技工作委员会
浩特互联网科技
壹账通互联网科技
深圳互联网科技怎么样
昭通云南众福互联网科技有限公司
深圳育鹏互联网科技有限公司招聘
如何创新互联网科技
洛阳共同富裕互联网科技有限公司
九思连强互联网电子科技有限公司