一、字符串函数
1.1.instr()
INSTR(str,substr)一共有两个参数
str被查询字符,substr查询字符,查询时下标从1开始记,只查询第一次出现的地方,为查询到显示为0
一般用法
SELECT INSTR(str,substr) FROM dual;
-- dual亚元表,系统表,可以作为测试表使用
-- 查询'hahaheha'中是否有'eh',有返回6
SELECT INSTR('hahaheha','eh') FROM dual;
详细用法及特殊用例如下:
先创建表
DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`xi` int NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
);
INSERT INTO `employee` VALUES (1001, '小红', 789123);
INSERT INTO `employee` VALUES (1002, '小白', 963258);
INSERT INTO `employee` VALUES (1003, '小绿', 987456);
INSERT INTO `employee` VALUES (1004, '小明', 753951);
示例
-- 查询xi中含有74的数据
SELECT * FROM employee WHERE INSTR(xi,'74')>0;
-- 相当于左右like查询
SELECT * FROM employee WHERE xi LIKE '%74%';
-- 相当于in的用法
SELECT * FROM employee WHERE INSTR('小白,小绿',name) > 0;
SELECT * FROM employee WHERE name IN('小白','小绿');
1.2.去除空格
LTRIM、RTRIM、TRIM去左空格,去有空格,去两边空格
SELECT LTRIM(字段) FROM DUAL;
SELECT LTRIM(' 芊嵛 ') FROM DUAL;
SELECT RTRIM(' 芊嵛 ') FROM DUAL;
SELECT TRIM(' 芊嵛 ') FROM DUAL;
结果:
-- 未了能看清空格我加了``
`芊嵛 `
` 芊嵛`
芊嵛
二、日期时间函数
2.1显示当前日期
-- 显示当前日期
SELECT CURRENT_DATE() FROM DUAL;
| CURRENT_DATE() |
|---|
| 2023-10-23 |
2.2显示当前时间
-- 显示当前时间
SELECT CURRENT_TIME() FROM DUAL;
| CURRENT_TIME() |
|---|
| 20:23:30 |
2.3显示当前日期和时间
-- 显示当前日期和时间
SELECT CURRENT_TIMESTAMP() FROM DUAL;
-- 显示当前日期和时间
SELECT NOW() FROM DUAL;
| CURRENT_TIMESTAMP() |
|---|
| 2023-10-23 20:23:30 |
| NOW() |
|---|
| 2023-10-23 20:29:13 |
2.4将已知日期和时间转换为日期
SELECT DATE('2023-10-23 20:30:15') FROM DUAL;
| DATE('2023-10-23 20:30:15') |
|---|
| 2023-10-23 |
2.5时间加/减时间
-- 加10分钟,后面的minute可以换成year那样就能加年了
SELECT DATE_ADD('2023-10-23 20:35:10' ,INTERVAL 10 MINUTE) FROM DUAL;
-- 减的话把DATE_ADD换成DATE_SUB
2.6相差多少天
-- 前减后
SELECT DATEDIFF('2005-11-11','2003-01-02') FROM DUAL;
-- 1044天
SELECT DATEDIFF('2005-11-11','2005-11-10') FROM DUAL;
-- 1天
2.7相差多少时间
-- 前减后
SELECT TIMEDIFF('20:10:03','19:11:10') FROM DUAL;
-- 00:58:53
2.8计算年龄
TIMESTAMPDIFF(YEAR, birth, NOW())
-- 能得出岁数
2.9返回1970-1-1到现在的毫秒数
SELECT UNIX_TIMESTAMP() FROM DUAL;
2.10把UNIX_TIMESTAMP()函数转换成具体日期格式
SELECT FROM_UNIXTIME(1698065850,'%Y-%m-%d') FROM DUAL;
SELECT FROM_UNIXTIME(1698065850,'%Y-%m-%d %H:%i%s') FROM DUAL;
| FROM_UNIXTIME(1698065850,'%Y-%m-%d') | FROM_UNIXTIME(1698065850,'%Y-%m-%d %H:%i%s') |
|---|---|
| 2023-10-23 | 2023-10-23 20:5730 |
三、加密函数和系统函数
3.1查询用户
-- USER()
SELECT USER() FROM DUAL;
-- 返回用户@IP地址,如上述语句运行得到 root@localhost
3.2查看当前所用的数据库
-- DATABASE();
SELECT DATABASE();
3.2为字符串算出一个MD5 32的字符串,常用(用户密码)加密
-- a8105204604a0b11e916f3879aae3b0b
SELECT MD5('密码') FROM DUAL;
-- 长度为32
SELECT LENGTH(MD5('密码')) FROM DUAL;