《每日工作总结》MySQL函数——15.09.17

1. DATEDIFF函数

格式:DATEDIFF(date1, date2)

      该函数用于求解 date1 与 date2 之间的** 天数 **之差。
例如:
SELECT DATEDIFF('2015-09-16', '2015-09-17') AS diffDay
结果为 -1。
      从结果可以看出,该函数的比较是通过 date1 - date2,若结果为正数,表明 date1 大于 date2,否则表示 date1 小于 date2。

      这个函数其实就是这么简单,但是经过我的一番度娘发现,这个函数在SQL Server数据库却有着更加复杂的实现。

格式:DATEDIFF(datepart, startdate, enddate)

其中datepart是表示要比较的时间范围,参考值如下表,startdate表示起始时间,enddate表示终止时间。

datepart 缩写
yy,yyyy
季度 qq,q
mm,m
年中的日 dy,y
dd,d
wk,ww
星期 dw, w
小时 hh
分钟 mi, n
ss, s
毫秒 ms
微妙 mcs
纳秒 ns

个人感觉比较常用的是年、月、日、周、时、分、秒,其他几个俺木有使用过。
使用这个函数完成MySQL的DATEDIFF函数的功能只需如下SQL语句。
SELECT DATEDIFF(d, '2015-09-16', '2015-09-17') AS diffDay

      那么在MySQL中如何实现SQL Server中DATEDIFF函数类似的功能呢,那就需要用到TIMESTAMPDIFF函数了。

格式:TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)

其中interval类似于SQL Server中DATEDIFF函数的datepart参数,取值如下表。

interval
FRAC_SECOND 毫秒
SECOND
MINUTE 分钟
HOUR 小时
DAY
WEEK 星期
MONTH
QUARTER 季度
YEAR

同样可以使用这个函数来MySQL中DATEDIFF函数的功能,只需使用如下的SQL语句。
SELECT TIMESTAMPDIFF(day, '2015-09-16', '2015-09-17') AS diffDay

      因此,在使用MySQL求时间差时,建议使用TIMESTAMPDIFF函数,在SQL Server中求时间差时,使用DATEDIFF函数。

2.GROUP_CONCAT函数

格式:GROUP_CONCAT([DISTINCT] field [ORDER BY ASC/DESC fieldname] [SEPARATOR 'separator']

该函数的作用是可以结合group by语句进行数据表的“行列转换”,将相同分组的某字段的值通过分隔符拼接到一个字段中。
例如:
原始表student_course:

id student_id course_name
1 1 数据结构
2 1 计算机组成原理
3 2 数据结构
4 3 高等数学
5 3 算法分析

执行下面的SQL语句将得到如下结果。
SELECT student_id, GROUP_CONCAT(name) as names FROM student_course group by student_id
结果:

student_id names
1 数据结构,计算机组成原理
2 数据结构
3 高等数学,算法分析

如果仅是需要展示数据,那么这样的结构也许可以满足需求,但是有些时候,我们可能需要进行真正的行列转换,那就需要使用到其他的函数了,可以参考下列文章。
http://www.cnblogs.com/oneivan/archive/2012/02/16/2353796.html
http://blog.csdn.net/kiki113/article/details/4105929

你可能感兴趣的:(《每日工作总结》MySQL函数——15.09.17)