MySQL中常见的函数以及常见的问题汇总
发表于:2024-11-14 作者:千家信息网编辑
千家信息网最后更新 2024年11月14日,本篇内容介绍了"MySQL中常见的函数以及常见的问题汇总"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成
千家信息网最后更新 2024年11月14日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安全错误
数据库的锁怎样保障安全
jdbc如何操作数据库事务
青海网络营销软件开发定制收费
网络技术服务定义
设计科技互联网案例
管理软件开发工程师岗位职责
网络安全防护落实不到位
海岛奇兵服务器连接
静电场复习软件开发
组态王的报表里无数据库
南关区有名的网络技术服务哪家好
我的邮件接收服务器
深圳市红思网络技术公司
宝山区推广软件开发报价方案
苏州奕盛网络技术发展
网络安全法 记录 保存
内网网络安全管理面试
全国网络安全优秀学生奖
网络安全等级考试有哪些
个人http服务器
校园 图片服务器
图书馆 数据库
育碧服务器怎么只能下载老版本
抽奖转盘软件开发
软件开发转实施的利弊
大学生网络安全具体分类
软件开发公司简介范文大全
硕讯服务器和霆智服务器
软件开发设计输入
网络技术认知报告
达梦数据库怎样进行迁移的