🏠關于專欄:半夜學習MySQL專欄用于記錄MySQL數據相關內容。
🎯每天努力一點點,技術變化看得見
文章目錄
- 日期函數
- 字符串函數
- 數學函數
- 其他函數
日期函數
函數名稱 | 描述 |
---|---|
current_date() | 當前日期 |
current_time() | 當前時間 |
current_time() | 當前時間戳 |
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 date_add('2024-1-1', interval 10 day);
●在日期的基礎上減去時間
select date_sub('2024-1-15', interval 10 day);
●計算兩個日期之間相差多少天
select datediff('2024-1-15', '2024-1-1');
案例1: 創建一張表,用于記錄會員編號和會員注冊日期
●創建一張會員表
create table vip(
id int unsigned primary key auto_increment,
sign_date date not null
);
●插入數據
insert into vip(sign_date) values(current_date());
insert into vip(sign_date) values(current_time());
insert into vip(sign_date) values(current_timestamp());
select * from vip;
★ps:雖然current_date()、current_time()、current_timestamp()均可時間日期的插入,但這里推薦使用current_date()。
案例2: 創建一個留言板
●創建一個留言表
create table msg(
id int unsigned primary key auto_increment,
content varchar(50) not null,
sendtime datetime
);
●插入數據
insert into msg(content, sendtime) values('沸羊羊', now());
insert into msg(content, sendtime) values('雙面龜', now());
select * from msg;
●顯式所有留言信息,只顯式日期,不顯示時間
select id, content, date(sendtime) from msg;
●查詢5分鐘內發布的貼子
#方法1
select * from msg where date_add(sendtime, interval 5 minute) > now();
#方法2
select * from msg where date_sub(now(), interval 5 minute) < sendtime;
字符串函數
函數名稱 | 描述 |
---|---|
charset(str) | 返回字符串字符集 |
concat(str [, …]) | 連接字符串 |
instr(str, substr) | 返回substr在str中出現的位置, 沒有則返回0 |
ucase(str) | 轉換為大寫 |
lcase(str) | 轉換為小寫 |
left(str, len) | ,從str中左邊起取len個字符 |
length(str) | str的長度 |
replace(str, search_str, replace_str) | 在str中用replace_str替換search_str |
strcmp(str1, str2) | 逐字符比較兩字符串大小 |
substring(str, position [,length] | 從str的position位置開始,取length個字符 |
ltrim(str) / rtrim(str ) / trim(str) | 去除前空格/后空格/前后空格 |
案例1: 獲取emp表的ename列的字符集
select charset(ename) from emp;
案例2: 顯式emp表中的信息,顯示格式:“員工號為:XXX,姓名為:XXX的員工,崗位為XXX”
select concat('員工號為:', empno, ',姓名為:', ename, '的員工,崗位為', job) from emp;
案例3: 顯示員工姓名作戰的字節數
select length(ename), ename from emp;
★ps:length函數返回字符串所占的字節數。字母、數字算一個字符,而其他字符,如中文,需要使用多個字符表示(具體與字符集編碼有關)。
案例4: 將emp表中所有姓名中有S的替換為“Jammingpro”
select replace(ename, 'S', 'Jammingpro'), ename from emp;
★ps:replace函數對數據的修改僅停留在顯示層面,并不會修改表中數據。
案例5: 截取emp表中ename字段的第二個到第三個字符
select substring(ename, 2, 2), ename from emp;
案例6: 以首字母大寫的方式,余下字母小寫顯示所有員工的姓名
select concat(ucase(substring(ename, 1, 1)), lcase(substring(ename, 2))) from emp;
數學函數
函數名稱 | 描述 |
---|---|
abs(num) | 絕對值函數 |
bin(decimal_num) | 十進制轉換二進制 |
hex(decimal_num) | 十進制轉換為十六進制 |
cov(num, from_base, to_base) | 進制轉換 |
ceiling(num) | 向上取整 |
floor(num) | 向下取整 |
format(num, decimal_places) | 格式化,保留小數位數 |
rand() | 返回隨機浮點數,范圍[0.0, 1.0] |
mod(num, denominator) | 取模,求余 |
使用示例:
●絕對值
select abs(-100.12);
select abs(2000.88);
●向上取整
select ceiling(10.1);
select ceiling(10.9);
select ceiling(-4.1);
select ceiling(-4.9);
●向下取整
select floor(10.1);
select floor(10.9);
select floor(-4.1);
select floor(-4.9);
★ps:取整分為零向取整、向上(向下)的整數取整、四舍五入。其中零向取整,10.1、10.9均向更靠近0的數字10取整,-4.1、-4.9向更偏向0的整數4取整。向上取整,10.1、10.9向大于該數的整數11取整,-4.1、-4.9向大于該數的整數-4取整。向下取整,10.1、10.9向小于該數的整數10取整,-4.1、-4.9向小于該數的整數-5取整。ceiling函數采用向上取整,floor函數采用向下取整。四舍五入取整方式這里不再贅述。
●保留2位小數(小數四舍五入)
select format(10.256, 2);
select format(12.123, 2);
●產生隨機數
select rand();
select rand();
select rand();
★ps:rand函數用于生產[0,1)間的隨機數,rand函數生成的隨機數是浮點數。
●模運算
select mod(10, 3);
其他函數
●user()查詢當前登陸用戶
select user();
●md5(str)對一個字符串進行md5摘要,摘要后得到一個32位字符串
select md5('jammmingpro');
select md5('a');
select md5('');
●database()顯示當前正在使用的數據庫名稱
select database();
●pwssword()函數用于對用戶密碼做加密,但該函數于MySQL5.7.6開始已經被棄用,因為它使用的哈希算法(DOUBLE SHA1)被認為較弱,不再適合用于密碼存儲。
select password('jammingpro');
●ifnull(val1, val2),如果val1為null,返回val2,否則返回val1的值
select ifnull('xiaoming', 'jammingpro');
select ifnull(null, 'jammingpro');
🎈歡迎進入半夜學習MySQL專欄,查看更多文章。
如果上述內容有任何問題,歡迎在下方留言區指正b( ̄▽ ̄)d