字符串函数
length
获取字节个数(utf-8 一个汉字为3个字节,gbk为2个字节)
SELECT LENGTH('YM'); # 输出:2
SELECT LENGTH('你好YM'); # 输出:8
char_length
获取字符个数,不管汉字还是数字或者是字母都算是一个字符
SELECT LENGTH('YM'); # 输出:2
SELECT LENGTH('你好YM'); # 输出:4
concat
拼接字符串
SELECT CONCAT('你好','YM'); # 输出:你好YM
substr / substring
截取字符串
substr(str,pos) # str:要裁剪的字符串,pos:要截取的长度
substr(str,pos,len) # len:截取几位
# substring同理
SELECT SUBSTR('HelloYM', 1, 5); # 输出:Hello
replace
替换
SELECT REPLACE('你好YM','你好','Hello'); # 输出:HelloYM
locate
获取字符串第一个出现的位置
SELECT LOCATE('YM','你好YM'); # 输出:3
SELECT LOCATE('Hello','你好YM'); # 输出:0
日期函数
datediff
DATEDIFF(d1,d2):计算两个日期的差值,间隔几天
-- 距今多少天
SELECT datediff('20210101', current_date());
date_add/date_sub
DATE_ADD(date,INTERVAL expr type):日期增加
DATE_SUB(date,INTERVAL expr type):日期减少
-- 指定时间加1秒 2021-01-01 00:00:00
SELECT DATE_ADD('2020-12-31 23:59:59', INTERVAL 1 SECOND);
SELECT "2020-12-31 23:59:59" + INTERVAL 1 SECOND;
str_to_date
STR_TO_DATE(dateStr,format):将字符通过指定的格式转换成日期
-- 输出 2021-04-27
SELECT STR_TO_DATE('04-27 2021','%c-%d %Y');
date_format
DATE_FORMAT(date,format):将日期转换成字符 %Y-%m-%d %H:%i:%s
-- 输出 2021年04月27日
SELECT DATE_FORMAT(NOW(),'%Y年%m月%d日');
-- 输出 2021-04-27 15:27:25
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s');
其他日期函数
其他函数
inet_aton/inet_ntoa
INET_ATON(IP):把ip转为无符号整型,如IP地址为a.b.c.d,计算方式为a*2563+b*2562+c*256+d
INET_NTOA():INET_ATON的逆向操作,把无符号整型转为ip
-- 输出3232235776
select INET_ATON('192.168.1.0');
-- 输出3232235777
select INET_ATON('192.168.1.1');
-- 输出3232235520
select INET_ATON('192.168.0.0');
应用:版本号处理
假设有以下表结构,需要查询某个版本及之前的数据,可以借助INET_ATON
函数进行实现查询。
-- 表结构(示例)
CREATE TABLE `T_VERSION_DATA` (
`ID` varchar(32) NOT NULL,
`VERSION` varchar(50) NOT NULL COMMENT '版本号,格式为1.0.0',
`VERSION_DATA` text COMMENT '版本内容',
PRIMARY KEY (`ID`)
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
-- 表数据(示例)
INSERT INTO `T_VERSION_DATA` (`ID`, `VERSION`, `VERSION_DATA`) VALUES ('1', '1.0.0', '1.0.0Data');
INSERT INTO `T_VERSION_DATA` (`ID`, `VERSION`, `VERSION_DATA`) VALUES ('2', '1.0.1', '1.0.1Data');
INSERT INTO `T_VERSION_DATA` (`ID`, `VERSION`, `VERSION_DATA`) VALUES ('3', '1.1.0', '1.1.0Data');
INSERT INTO `T_VERSION_DATA` (`ID`, `VERSION`, `VERSION_DATA`) VALUES ('4', '1.1.1', '1.1.1Data');
INSERT INTO `T_VERSION_DATA` (`ID`, `VERSION`, `VERSION_DATA`) VALUES ('5', '1.10.1', '1.10.1Data');
INSERT INTO `T_VERSION_DATA` (`ID`, `VERSION`, `VERSION_DATA`) VALUES ('6', '1.2.1', '1.2.1Data');
INSERT INTO `T_VERSION_DATA` (`ID`, `VERSION`, `VERSION_DATA`) VALUES ('7', '2.0.0', '2.0.0Data');
-- 查询语句
select * FROM (
SELECT *,INET_ATON(VERSION) AS ver FROM T_VERSION_DATA
) a WHERE ver <= INET_ATON('1.10.1') ORDER BY ver DESC;