文章目錄
- 前言
- 一、日期函數
- 二、字符串函數
- 三、數學函數
- 四、其它函數
- 總結
前言
??其實在之前的幾篇中我們也用到了內置函數,現在我們再來系統學習一下它!
一、日期函數
函數名稱 | 描述 |
---|---|
current_date() | 獲取當前日期 |
current_time() | 獲取當前時間 |
current_timestamp() | 獲取當前時間戳 |
date(datetime) | 返回 datetime 參數的日期部分 |
date_add(date, interval d_value_type) | 在 date 中添加日期或時間,interval 后的數值單位可以是 year、minute、second、day |
date_sub(date, interval d_value_type) | 在 date 中減去日期或時間,interval 后的數值單位可以是 year、minute、second、day |
datediff(date1, date2) | 計算兩個日期之間的差值,單位是天 |
now() | 獲取當前日期時間 |
- 獲取當前日期
SELECT current_date();
- 獲取當前時間
SELECT current_time();
- 獲取當前時間戳
SELECT current_timestamp();
- 獲取當前日期時間
SELECT now();
- 截斷當前時間,只獲得日期部分
SELECT date(now());
- 在日期的基礎上加日期
SELECT date_add(now(), interval 10 year);
- 在日期的基礎上減去時間
SELECT date_sub(now(), interval 10 minute);
- 計算兩個日期之間相差多少天
SELECT datediff(now(), '1949-10-01');
??學了以上函數總得來個實際案例來試驗一下
??創建一張記錄生日的表
CREATE TABLE tmp(id INT PRIMARY KEY AUTO_INCREMENT,birthday DATE NOT NULL
);
??雖然 current_time() 這里顯示的是時分秒,實際上插入的時候也能插入,所有的時間在獲取的時候都是 年-月-日,時:分:秒,只不過顯示時是不一樣的。
??創建一個留言表
CREATE TABLE msg( id INT PRIMARY KEY AUTO_INCREMENT,content VARCHAR(100) NOT NULL,sendtime DATETIME
);
??顯示所有留言信息,發布日期只顯示日期
SELECT content, date(sendtime) FROM msg;
??然后我們查看2分鐘內發的貼子
SELECT * FROM msg WHERE date_add(sendtime, interval 2 minute) > now();
二、字符串函數
函數名稱 | 描述 |
---|---|
charset(str) | 返回字符串字符集(編碼集) |
concat(string [,…]) | 連接字符串 |
instr(string, substring) | 返回子字符串在字符串中的位置,無則返回0(mysql 起始從 1 開始 |
ucase(string) | 轉換成大寫 |
lcase(string) | 轉換成小寫 |
left(string, length) | 從字符串左邊起取 length 個字符 |
right(string, length) | 從字符串右邊起取 length 個字符 |
length(string) | 字符串長度 |
replace(str, search_str, replace_str) | 在字符串中用 replace_str 替換 search_str |
strcmp(string1, string2) | 逐字符比較兩個字符串大小 |
substring(str, position [,length]) | 從字符串的 position 開始,取 length 個字符 |
ltrim(string), rtrim(string), trim(string) | 去除前后空格 |
- 獲取 emp 表的 ename 列的字符集
SELECT charset(ename) FROM emp;
- 連接字符串
SELECT concat(name, '的語文是', chinese, '分,', '數學', math, '分,', '英語', english, '分') FROM exam_result;
- 求學生表中學生姓名占用的字節數
select length(name) from exam_result;
??以前說過 mysql 的字符真的就是一個字符,utf8中一個漢字占3個字節。
??length函數返回字符串長度,以字節為單位。如果是多字節字符則計算多個字節數;如果是單字節字符則算作一個字節。比如:字母,數字算作一個字節,中文表示多個字節數(與字符集編碼有關)
- 截取 emp 表中 ename 字段的第二個到第三個字符
SELECT ename, substring(ename, 2, 2) FROM emp;
- 以首字母小寫的方式顯示所有員工的姓名
SELECT ename, concat(lcase(substring(ename, 1, 1)), substring(ename, 2)) FROM emp;
??substring(ename, 1, 1) 從第一個開始,截一個字符
三、數學函數
函數名稱 | 描述 |
---|---|
abs(number) | 絕對值函數 |
bin(decimal_number) | 十進制轉二進制 |
hex(decimalNumber) | 轉換成十六進制 |
conv(number, from_base, to_base) | 進制轉換 |
ceiling(number) | 向上去整(數據變大 |
floor(number) | 向下去整 |
format(number, decimal_places) | 格式化,保留小數位數 |
rand() | 返回隨機浮點數,范圍 [0.0, 1.0) |
mod(number, denominator) | 取模,求余 |
- ceiling(number) 向上去整
- floor(number) 向下去整
??一般我進行取整的時候是進行 四舍五入 取整,但是除了 四舍五入 還有其他的取整方式。我們把丟棄小數部分的取整方式稱為向0取整,以前我們在 C 學的 9 / 2 = 4 就是向0取整,還有向大的方向取的向上取整、向小的方向取的向下取整
四、其它函數
??查詢當前用戶
SELECT user();
??顯示當前正在使用的數據庫
SELECT database();
??一個字符串進行md5摘要,摘要后得到一個32位字符串
select md5(string);
??如果 val1 為null,返回 val2 ,否則返回 val1 的值
IFNULL(val1, val2) -- 如果 `val1` 為 `NULL`,返回 `val2`,否則返回 `val1` 的值
總結
??以上函數提供了豐富的操作能力,使得在處理數據時更加靈活和方便,因此我們需要好好掌握!!!