字符串函數
函數
功能
CONCAT(str1, str2,…,strn)
連接字符串str1,…,strn為一個完整字符串
INSERT(str, x, y, instr)
將字符串str從第x位置開始,y個字符長的子串替換為字符串instr
LOWER(str) / UPPER(str)
將字符串str中所有字符變為小寫(大寫)
LEFT(str, x) / RIGHT(str, x)
返回字符串str中最左(右)邊的x個字符
LTRIM(str) / RTRIM(str)
去掉字符串str左(右)邊的空格
TRIM(str)
去掉字符串str行頭和行尾的空格
LPAD(str,n,pad) RPAD(str,n,pad)
使用字符串pad對字符串str最左(右)邊進行填充,直到長度為n個字符長度
REPEAT(str,x)
返回字符串str重複x次的結果
REPLACE(str,a,b)
用字符串b替換字符串str中所有出現的字符串a
STRCMP(str1, str2)
比較字符串str1和str2
SUBSTRING(str, x, y)
返回字符串str從x位置起y個字符長度的字符串
合併字符串
v 方式1:CONCATE()函數
§ CONCAT(s1, s2, …, sn)
§ 將字符串合併起來,如果其中一個為NULL, 返回值為NULL
§ 可以接受非字符串參數
§ 例子:SELECT CONCAT(『Hello』,『 World』, 1234);
§ 例子:SELECT CONCAT(『Hello』,』 World』, NULL);
mysql> select concat('hello','wold',1234);
+----+
| concat('hello','wold',1234) |
+----+
| hellowold1234 |
+----+
1 row in set (0.00 sec)
mysql> select concat('hello','wold',NULL);
+----+
| concat('hello','wold',NULL) |
+----+
| NULL |
+----+
1 row in set (0.00 sec)
v 方式2:CONCATE_WS()函數
§ CONCAT_WS(sep, s1, s2, …, sn)
§ 將字符串合併起來,並用sep作為分隔符
§ 例子:SELECT CONCAT_WS(『%』,『Hi』,『World』);
mysql> select concat_ws('%','Hi','World');
+----+
| concat_ws('%','Hi','World') |
+----+
| Hi%World |
+----+
1 row in set (0.00 sec)
比較字符串
v STRCMP(str1, str2) 函數
§ 如果str1大於str2,返回1
§ 如果str1等於str2,返回0
§ 如果str1小於str2,返回-1
STRCMP(『abc』,』abc』),
STRCMP(『abc』,』abb』);
mysql> select strcmp('abc','abd'),strcmp('abc','abc'),strcmp('abc','abb');
+-+-+-+
| strcmp('abc','abd') | strcmp('abc','abc') | strcmp('abc','abb') |
+-+-+-+
| -1 | 0 | 1 |
+-+-+-+
1 row in set (0.00 sec)
長度函數
v 獲取字符串長度函數 LENGTH()
§ LENGTH(str) : 字節長度
§ 例子:SELECT LENGTH(『MySQL』) ,
LENGTH(『中國』) ;
mysql> select LENGTH('MySql'),LENGTH('中國');\G
+--+---+
| LENGTH('MySql') | LENGTH('中國') |
+--+---+
| 5 | 6 |
+--+---+
1 row in set (0.01 sec)
v 獲取字符函數 CHAR_LENGTH()
§ CHAR_LENGTH(str) : 字符長度
§ 例子:SELECT CHAR_LENGTH(『MySQL』) ,
CHAR_LENGTH(『中國』) ;
mysql> select char_length('MySql'),char_length('中國');
+--+---+
| char_length('MySql') | char_length('中國') |
+--+---+
| 5 | 2 |
+--+---+
1 row in set (0.00 sec)
替換字符串
v INSERT(str, pos, len, newstr):
§ 將字符串str中從pos位置開始長度為len的字符串用newstr替換
§ 例子:SELECT 『這是MySQL資料庫管理系統』 原字符串,
INSERT(『這是MySQL資料庫管理系統』 , 3, 5,『ORACLE』, 2) 替換後;
mysql> SELECT '這是MySQL資料庫管理系統' as 原字符串, INSERT('這是MySQL資料庫管理系統',3,5,'ORACLE') as 替換後;
+----++
| 原字符串 | 替換後 |
+----++
| 這是MySQL資料庫管理系統 | 這是ORACLE資料庫管理系統 |
+----++
1 row in set (0.00 sec)
v REPLACE(str, substr, newstr):
§ 將str中substr替換為newstr
§ 例子:SELECT 『這是SQL資料庫管理系統MySQL』 原字符串,
REPLACE(『這是SQL資料庫管理系統MySQL』 , 』SQL』, 『ORACLE』) 替換後;
mysql> SELECT '這是MySQL資料庫管理系統' as 原字符串,
-> REPLACE('這是MySQL資料庫管理系統','SQL','ORACLE') as 替換後;
+----+--+
| 原字符串 | 替換後 |
+----+--+
| 這是MySQL資料庫管理系統 | 這是MyORACLE資料庫管理系統 |
+----+--+
1 row in set (0.00 sec)
字母大小寫轉換
v 字母轉大寫:UPPER(s), UCASE(s)
§ 例子:SELECT UPPER(『mysql』) ,
UCASE(『mysql』) ;
mysql> SELECT UPPER('mysql'),ucase('mysql_small');
+-+--+
| UPPER('mysql') | ucase('mysql_small') |
+-+--+
| MYSQL | MYSQL_SMALL |
+-+--+
1 row in set (0.00 sec)
v 字母轉大寫:LOWER(s), LCASE(s)
§ 例子:SELECT LOWER(『MySQL』) ,
LCASE(『MySQL』) ;
mysql> SELECT LOWER('MySQL'), LCASE('MySQL');
+-+-+
| LOWER('MySQL') | LCASE('MySQL') |
+-+-+
| mysql | mysql |
+-+-+
1 row in set (0.00 sec)
查找字符串
v 返回字符串位置:FIND_IN_SET(str1, str2)
§ 返回在str2中與str1相匹配的字符串的位置,str2包含若干個用逗號隔開的字符串
§ 例子:SELECT FIND_IN_SET(『MySQL』,』ab,test,MySQL』);
mysql> SELECT FIND_IN_SET('MySQL','ab,test,MySQL');
+---+
| FIND_IN_SET('MySQL','ab,test,MySQL') |
+---+
| 3 |
+---+
1 row in set (0.00 sec)
v 返回指定字符串位置:FIELD(str, str1, str2)
§ 返回第一個與字符串str匹配的字符串的位置
§ 例子:SELECT FIELD(『ab』,』a』,』ab』,』ac』,』ab』);
v 返回字符串相匹配的開始位置:
§ LOCATE(str1, str): 返回str中str1的開始位置
§ POSITION(str1 IN str)
§ INSTR(str, str1)
§ 例子:SELECT LOCATE(『SQL』,』MySQL』),
POSITION(『SQL』 IN 』MySQL』) ,
INSTR(『MySQL』,』SQL』) ;
v 截取字符串:
§ LEFT(str, num) : 返回字符串str中左邊num個字母的字符串
§ RIGHT(str, num):返回字符串str中右邊num個字母的字符串
§ 例子:SELECT LEFT(『MySQL』, 2) 前兩個字符串,
RIGHT(『MySQL』, 2) 後兩個字符串;
v 截取指定位置和長度字符串:
§ SUBSTRING(str, num, len) :
§ MID(str, num, len)
§ 返回字符串str中第num個位置開始長度為len的字符串
§ 例子:SELECT SUBSTRING(『MySQL』, 3,3) 截取的字符串,
MID(『MySQL』, 3,3) 截取的字符串;
mysql> select field('ab','a','ab','ac','ab');
+--+
| field('ab','a','ab','ac','ab') |
+--+
| 2 |
+--+
1 row in set (0.00 sec)
mysql> select locate('SQL','MySQL'), position('SQL' in 'MySQL'), instr('MySQL','SQL');
+---+---+--+
| locate('SQL','MySQL') | position('SQL' in 'MySQL') | instr('MySQL','SQL') |
+---+---+--+
| 3 | 3 | 3 |
+---+---+--+
1 row in set (0.00 sec)
mysql> select left('MYSQL',2),RIGHT('MYSQL',2);
+--+---+
| left('MYSQL',2) | RIGHT('MYSQL',2) |
+--+---+
| MY | QL |
+--+---+
1 row in set (0.00 sec)
mysql> select substring('MYSQL',3,3),mid('MYSQL',3,3);
+----+---+
| substring('MYSQL',3,3) | mid('MYSQL',3,3) |
+----+---+
| SQL | SQL |
+----+---+
1 row in set (0.00 sec)
數值函數
函數
功能
ABS(x)
返回x的絕對值
CEIL(x)
返回大於x的最小整數值
FLOOR(x)
返回小於x的最大整數值
MOD(x,y)
返回x模y的值
RAND(x)
返回0~1的隨機數
ROUND(x,y)
返回x的四捨五入後有y位小數的數值
TRUNCATE(x,y)
返回x截斷為y位小數的數值
mysql> select rand(),rand(1),rand(2),rand(3);
++-+++
| rand() | rand(1) | rand(2) | rand(3) |
++-+++
| 0.1878656774646283 | 0.40540353712197724 | 0.6555866465490187 | 0.9057697559760601 |
++-+++
1 row in set (0.00 sec)
mysql> select ceil(2.1),ceil(-2.1),floor(2.1),floor(-2.1);
+-+--+--+---+
| ceil(2.1) | ceil(-2.1) | floor(2.1) | floor(-2.1) |
+-+--+--+---+
| 3 | -2 | 2 | -3 |
+-+--+--+---+
1 row in set (0.00 sec)
mysql> select round(2.3456),round(2.34567,2);
++---+
| round(2.3456) | round(2.34567,2) |
++---+
| 2 | 2.35 |
++---+
1 row in set (0.00 sec)
mysql> select truncate(122.23456,2),truncate(1223.3456,-1);
+---+----+
| truncate(122.23456,2) | truncate(1223.3456,-1) |
+---+----+
| 122.23 | 1220 |
+---+----+
1 row in set (0.00 sec)
mysql> select mod(10,3);
+-+
| mod(10,3) |
+-+
| 1 |
+-+
1 row in set (0.00 sec)
日期和時間函數
函數
功能
CURDATE()
獲取當前日期
CURTIME()
獲取當前時間
NOW()
獲取當前的日期和時間
WEEK(date)
返回日期date為一年中的第幾周
YEAR(date)
返回日期date的年份
HOUR(time)
返回時間time的小時值
MINUTE(time)
返回時間time的分鐘值
MONTHNAME(time)
返回時間time的月份值
v 獲取當前日期和時間
§ NOW(), CURRENT_TIMESTAMP(),
§ LOCALTIME(), SYSDATE()
v 獲取當前日期
§ CURDATE(), CURRENT_DATE()
v 獲取當前時間
§ CURTIME(), CURRENT_TIME()
v 獲取當前時間的年月季度周天時分秒
§YEAR(),QUARTER(),MONTH() ,WEEK(),DAYOFMONTH(),HOUR(),MINUTE(),SECOND()
# 獲取當前日期和時間
mysql> SELECT NOW(),CURRENT_TIMESTAMP(),LOCALTIME(),SYSDATE();
+-+-+-+-+
| NOW() | CURRENT_TIMESTAMP() | LOCALTIME() | SYSDATE() |
+-+-+-+-+
| 2021-02-27 12:03:10 | 2021-02-27 12:03:10 | 2021-02-27 12:03:10 | 2021-02-27 12:03:10 |
+-+-+-+-+
1 row in set (0.02 sec)
#獲取當前日期
mysql> SELECT CURDATE(),CURRENT_DATE();
+--+-+
| CURDATE() | CURRENT_DATE() |
+--+-+
| 2021-02-27 | 2021-02-27 |
+--+-+
1 row in set (0.00 sec)
#獲取當前時間
mysql> SELECT CURTIME(),CURRENT_TIME();
+-+-+
| CURTIME() | CURRENT_TIME() |
+-+-+
| 12:03:52 | 12:03:52 |
+-+-+
1 row in set (0.00 sec)
#獲取當前時間的年月季度周 WEEK 是一年中第幾周
mysql> SELECT NOW(),YEAR(NOW()),QUARTER(NOW()),MONTH(NOW()),WEEK(NOW());
+-+---+-+----+---+
| NOW() | YEAR(NOW()) | QUARTER(NOW()) | MONTH(NOW()) | WEEK(NOW()) |
+-+---+-+----+---+
| 2021-02-27 12:05:13 | 2021 | 1 | 2 | 8 |
+-+---+-+----+---+
1 row in set (0.00 sec)
#天時分秒
mysql> SELECT DAYOFMONTH(NOW()),HOUR(NOW()),MINUTE(NOW()),SECOND(NOW());
+----+---+++
| DAYOFMONTH(NOW()) | HOUR(NOW()) | MINUTE(NOW()) | SECOND(NOW()) |
+----+---+++
| 27 | 12 | 5 | 53 |
+----+---+++
1 row in set (0.00 sec)
## xxxNAME 表示時間名稱 英語或中文
mysql> SELECT NOW(),MONTHNAME(NOW()),WEEKOFYEAR(NOW()) AS '年中第幾周', dayname(now()),dayofweek(now());
+-+---+--+-+---+
| NOW() | MONTHNAME(NOW()) | 年中第幾周 | dayname(now()) | dayofweek(now()) |
+-+---+--+-+---+
| 2021-02-27 12:08:16 | February | 8 | Saturday | 7 |
+-+---+--+-+---+
1 row in set (0.00 sec)
mysql> select now(),dayofyear(now()) 年中第幾天 ,dayofmonth(now()) 月中第幾天;
+-+--+--+
| now() | 年中第幾天 | 月中第幾天 |
+-+--+--+
| 2021-02-27 12:11:18 | 58 | 27 |
+-+--+--+
1 row in set (0.00 sec)
mysql> select now(),week(now()),weekofyear(now()),dayofweek(now()), dayofyear(now()),dayofmonth(now());
+-+---+----+---+---+----+
| now() | week(now()) | weekofyear(now()) | dayofweek(now()) | dayofyear(now()) | dayofmonth(now()) |
+-+---+----+---+---+----+
| 2021-02-27 12:17:28 | 8 | 8 | 7 | 58 | 27 |
+-+---+----+---+---+----+
1 row in set (0.00 sec)
v 計算日期和時間的函數
§ TO_DAYS(date):計算date與默認日期(0000年1月1日)之間的天數
§ FROM_DAYS(number):計算從默認日期開始number天后的日期
§ DATE(date1, date2):date1 與 date2 之間的相隔天數
§ ADDDATE(date, n):日期date加上n天后的日期
§ SUBDATE(date, n):日期date減去n天后的日期
mysql> select now() 當前時間,to_days(now()) 相隔天數, from_days(to_days(now())) 現在日期;
+-+----+----+
| 當前時間 | 相隔天數 | 現在日期 |
+-+----+----+
| 2021-02-27 12:22:41 | 738213 | 2021-02-27 |
+-+----+----+
1 row in set (0.00 sec)
mysql> select adddate(curdate(),5) , subdate(curdate(),5);
+--+--+
| adddate(curdate(),5) | subdate(curdate(),5) |
+--+--+
| 2021-03-04 | 2021-02-22 |
+--+--+
1 row in set (0.00 sec)