mysql之常用函数及sql语句
2018-06-11 本文已影响13人
iszengmh
参考链接(如有侵权立即删除)
MYSQL日期获取(本月最后一天、本月第一天、下个月第一天、本月天数、一个月前那一天、当前时间与一个月前之间的天数)——CSDN@
combating
mysql取系统当前时间的函数——CSDN@Marjorie_Sha
MYSQL中可以实现类似IF判断的方法——博客园@奋斗的羊仔
mysql 获取当前日期周一和周日——CSDN@huanghanqian
mysql格式化日期——博客园@都市烟火
mysql 数据库中最新的一条记录 sql查询语句——百度经验@412482552
正文
常用函数
日期函数及常用时间计算
# 函数以`'YYYY-MM-DD HH:MM:SS'返回当前的日期时间,可以直接存到DATETIME字段中。
NOW()
# 获取当前日期,不包含times
curdate() # 2018-06-11
# 获取本月的最后一天
last_day(curdate());
#获取本月第一天
select date_add(curdate(), interval - day(curdate()) + 1 day);
#获取下个月第一天
select date_add(curdate() - day(curdate()) + 1, interval 1 month);
#获取本月天数
select day(last_day(curdate()));
#获取一个月前那一天
select date_sub(curdate(), interval 1 month);
#获取当前时间与一个月之间的天数
select datediff(curdate(), date_sub(curdate(), interval 1 month));
# 获取当前日期在本周的周一
select subdate(curdate(),date_format(curdate(),'%w')-1)
# 获取下周日(由于系统默认一周的开始时间是周日,所以获取下周日,通常是我们所认为的本周日)
select subdate(curdate(),date_format(curdate(),'%w')-7)
# 取一天的结束时间
select DATE_ADD(DATE_ADD(str_to_date(DATE_FORMAT(NOW(),'%Y-%m-%d'),'%Y-%m-%d %H:%i:%s'),INTERVAL 1 DAY),INTERVAL -1 SECOND); #2018-06-11 23:59:59
# 格式化日期 DATE_FORMAT(date,format),查看本文详细
DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p') # Jun 11 2018 09:13 AM
date_format(NOW(), '%Y-%c-%d %h:%i:%s' ) # 2018-6-11 09:15:26
格式化日期详细说明
格式 | 说明 |
---|---|
%a | 缩写星期名 |
%b | 缩写月名 |
%c | 月,数值 |
%D | 带有英文前缀的月中的天 |
%d | 月的天,数值(00-31) |
%e | 月的天,数值(0-31) |
%f | 微秒 |
%H | 小时 (00-23) |
%h | 小时 (01-12) |
%I | 小时 (01-12) |
%i | 分钟,数值(00-59) |
%j | 年的天 (001-366) |
%k | 小时 (0-23) |
%l | 小时 (1-12) |
%M | 月名 |
%m | 月,数值(00-12) |
%p | AM 或 PM |
%r | 时间,12-小时(hh:mm:ss AM 或 PM) |
%S | 秒(00-59) |
%s | 秒(00-59) |
%T | 时间, 24-小时 (hh:mm:ss) |
%U | 周 (00-53) 星期日是一周的第一天 |
%u | 周 (00-53) 星期一是一周的第一天 |
%V | 周 (01-53) 星期日是一周的第一天,与 %X 使用 |
%v | 周 (01-53) 星期一是一周的第一天,与 %x 使用 |
%W | 星期名 |
%w | 周的天 (0=星期日, 6=星期六) |
%X | 年,其中的星期日是周的第一天,4 位,与 %V 使用 |
%x | 年,其中的星期一是周的第一天,4 位,与 %v 使用 |
%Y | 年,4 位 |
%y | 年,2 位 |
判断
# case……when…… else……END
CASE expression
WHEN value1 THEN returnvalue1
WHEN value2 THEN returnvalue2
WHEN value3 THEN returnvalue3
……
ELSE defaultreturnvalue
END
# IF(expr1,expr2,expr3)
select t.name,if(t.weight<80,'正常','肥胖') 体重 from t_customer t
# ELT(N,str1,str2,str3,...)
# 如果 N = 1,返回 str1,如果N = 2,返回 str2,等等。如果 N 小于 1 或大于参数的数量,返回 NULL。
SELECT
t. NAME,
ELT(
t. LEVEL,
'超级VIP',
'VIP',
'普通'
) 客户类型
FROM
t_customer t
字符串拼接
# CONCAT(string1,string2,…)
concat('a=','b') # a=b
# CONCAT_WS(separator,str1,str2,...)
CONCAT_WS('=','a','b') # a=b
CONCAT_ws(' ',date_format(NOW(), '%Y-%c-%d' ),DATE_FORMAT(NOW(),'%h:%i:%s')) # 2018-6-11 09:26:40
# 将多组数据合并为一个字符串 separator 是关键字,后面表示用逗号分隔
GROUP_CONCAT(dd.dictionary_Name separator ',')
字符串转Date
#str_to_date('字符串日期','格式')
str_to_date('2017-10-16 15:30:28','%Y-%m-%d %H:%i:%s')
查询
# 这个函数返回字符串在某一个字段的内容中的位置, 没有找到字符串返回0,否则返回位置(从1开始); 可在博客置顶状态灵活运用
INSTR(字段名, 字符串);
常用sql语句
获取最新一条记录
SELECT mytime from table order by mytime desc LIMIT 1
博客“置顶”状态,排序
# 将带有置顶字段的数据进行排序,也就是排前面
select *from forum t order by instr(t.state,'置顶') desc
查询多条语句,并拼接成一个字符串
# 查出多个分类数据,拼接成一个字符串
select GROUP_CONCAT(dd.dictionary_Name separator ',') from t_data_dictionary dd where FIND_IN_SET(dd.dictionary_id , 'abfdfa,dsfoisdf,weorieuo')