TIMESTAMPDIFF 示例一: 示例二: TIMESTAMPADD 示例: msyql中CASE WHEN语法 CASE具有两种格式:简单CASE函数将某个表达式与一组简单表达式进行比较以确定结果。CASE搜索函数计算一组布尔表达式以确定结果。两种都支持可选的ELSE函数。 1)简单CASE函数 语法如下: 参数介绍 2)CASE搜索函数 语法如下: 参数介绍: 3)CASE WHEN例子介绍 1、仅带简单case的select语句 2、使用带有简单CASE函数和CASE搜索函数的select语句 在select语句中,CASE搜索函数允许根据比较值 3)CASE的其他用法 left join、right join、inner join的区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接) 只返回两个表中联结字段相等的行 举例如下: 表A记录如下: aID aNum 1 a20050111 2 a20050112 3 a20050113 4 a20050114 5 a20050115 表B记录如下: bID bName 1 2006032401 2 2006032402 3 2006032403 4 2006032404 8 2006032408 1.left join sql语句如下: select * from A left join B on A.aID = B.bID 结果如下: aID aNum bID bName 1 a20050111 1 2006032401 2 a20050112 2 2006032402 3 a20050113 3 2006032403 4 a20050114 4 2006032404 5 a20050115 NULL NULL (所影响的行数为 5 行) 结果说明: left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的. 换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID). B表记录不足的地方均为NULL. 2.right join sql语句如下: select * from A right join B on A.aID = B.bID 结果如下: aID aNum bID bName 1 a20050111 1 2006032401 2 a20050112 2 2006032402 3 a20050113 3 2006032403 4 a20050114 4 2006032404 NULL NULL 8 2006032408 (所影响的行数为 5 行) 结果说明: 仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充. 3.inner join sql语句如下: select * from A innerjoin B on A.aID = B.bID 结果如下: aID aNum bID bName 1 a20050111 1 2006032401 2 a20050112 2 2006032402 3 a20050113 3 2006032403 4 a20050114 4 2006032404 结果说明: 很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录. 注: LEFT JOIN操作用于在任何的 FROM 子句中,组合来源表的记录。使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。 语法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2 说明:table1, table2参数用于指定要将记录组合的表的名称。 field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。 compopr参数指定关系比较运算符:"=", "<", ">", "<=", ">=" 或 "<>"。 如果在INNER JOIN操作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误. 其他常用函数mysql中TIMESTAMPDIFF和TIMESTAMPADD函数的用法
TIMERSTAMPDIFF语法:
TIMERSTAMPDIFF(interval,datetime_expr1,datetime_expr2)
?
说明:
该函数是返回datetime_expr1和datetime_expr2之间的整数差,其中单位有interval参数决定,interval的常用参数有:
FRAC_SECOND 时间间隔是毫秒
SECOND 时间间隔是秒
MINUTE 时间间隔是分钟
HOUR 时间间隔是小时
DAY 时间间隔是天
WEEK 时间间隔是周
MOUTH 时间间隔是月
QUARTER 时间间隔是季度
YEAR 时间间隔是年
MariaDB [(none)]> select timestampdiff(hour,'2018-06-05 09:00:00','2018-06-15 09:00:00');
+-----------------------------------------------------------------+
| timestampdiff(hour,'2018-06-05 09:00:00','2018-06-15 09:00:00') |
+-----------------------------------------------------------------+
| 240 |
+-----------------------------------------------------------------+
1 row in set (0.00 sec)
?
MariaDB [(none)]> select timestampdiff(day,'2018-06-05 09:00:00','2018-06-15 09:00:00');
+----------------------------------------------------------------+
| timestampdiff(day,'2018-06-05 09:00:00','2018-06-15 09:00:00') |
+----------------------------------------------------------------+
| 10 |
+----------------------------------------------------------------+
1 row in set (0.00 sec)
?
TIMESTAMPADD语法:
TIMESTAMPADD(interval,int_expr,datetime_expr)
?
说明:
将整型表达式int_expr 添加到日期或日期时间表达式 datetime_expr中。式中的interval和TIMESTAMPDIFF中列举的取值是一样的。
MariaDB [(none)]> select timestampadd(second,86400,'2018-06-15 09:00:00');
+--------------------------------------------------+
| timestampadd(second,86400,'2018-06-15 09:00:00') |
+--------------------------------------------------+
| 2018-06-16 09:00:00 |
+--------------------------------------------------+
1 row in set (0.00 sec)
?
MySQL中case when语句,用于计算条件列表并返回多个可能表达式之一。
CASE input_expression
WHEN when_expression THEN
result_expression [...n ] [
ELSE
else_result_expression
END
input_expression是使用简单 CASE 格式时所计算的表达式。Input_expression 是任何有效的 Microsoft SQL Server 表达式。
WHEN when_expression使用简单 CASE 格式时 input_expression 所比较的简单表达式。When_expression 是任意有效的 SQL Server 表达式。Input_expression 和每个 when_expression 的数据类型必须相同,或者是隐性转换。
占位符,表明可以使用多个 WHEN when_expression THEN result_expression 子句或 WHEN Boolean_expression THEN result_expression 子句。
THEN result_expression 当 input_expression = when_expression 取值为 TRUE,或者 Boolean_expression 取值 TRUE 时返回的表达式。
result expression 是任意有效的 SQL Server 表达式。
ELSE else_result_expression当比较运算取值不为 TRUE 时返回的表达式。如果省略此参数并且比较运算取值不为 TRUE,CASE 将返回 NULL 值。else_result_expression 是任意有效的 SQL Server 表达式。else_result_expression 和所有 result_expression 的数据类型必须相同,或者必须是隐性转换。
?
简单 CASE 函数:返回结果值介绍:
?
计算 input_expression,然后按指定顺序对每个 WHEN 子句的 input_expression = when_expression 进行计算。
返回第一个取值为 TRUE 的 (input_expression = when_expression) 的 result_expression。如果没有取值为 TRUE 的 input_expression = when_expression,则当指定 ELSE 子句时 SQL Server 将返回 else_result_expression;若没有指定 ELSE 子句,则返回 NULL 值。
CASE
WHEN Boolean_expression THEN
result_expression [...n ] [
ELSE
else_result_expression
END
?
WHEN Boolean_expression 使用 CASE 搜索格式时所计算的布尔表达式。Boolean_expression 是任意有效的布尔表达式。结果类型从 result_expressions 和可选 else_result_expression 的类型集合中返回最高的优先规则类型。有关更多信息,请参见数据类型的优先顺序。
?
CASE 搜索函数:返回结果值介绍:
按指定顺序为每个 WHEN 子句的 Boolean_expression 求值。返回第一个取值为 TRUE 的 Boolean_expression 的 result_expression。
如果没有取值为 TRUE 的 Boolean_expression,则当指定 ELSE 子句时 SQL Server 将返回 else_result_expression;若没有指定 ELSE 子句,则返回 NULL 值。
select
CASE good_type
WHEN '0' THEN
'食品类'
WHEN '1' THEN
'饮料类'
WHEN '2' THEN
'日用品'
WHEN '3' THEN
'鲜果类'
END AS good_type_now,
good_type,user_id,user_name
FROM
express.t_main_order
+---------------+-----------+---------+-----------+
| good_type_now | good_type | user_id | user_name |
+---------------+-----------+---------+-----------+
| 食品类 | 0 | 1 | tina |
| 食品类 | 0 | 2 | tige |
| 饮料类 | 1 | 3 | five |
| 日用品 | 2 | 4 | wate |
| 鲜果类 | 3 | 5 | fiww |
| 鲜果类 | 3 | 6 | www |
| 鲜果类 | 3 | 7 | wfiw |
+---------------+-----------+---------+-----------+
?
select
CASE
WHEN good_type<2
THEN '<2'
WHEN good_type>=2 AND good_type<3
THEN '>=2 && <3'
ELSE '>=3' END AS good_now_type,
good_type,user_id,user_name
FROM t_main_order;
+---------------+-----------+---------+-----------+
| good_now_type | good_type | user_id | user_name |
+---------------+-----------+---------+-----------+
| <2 | 0 | 1 | tina |
| <2 | 0 | 2 | tige |
| <2 | 1 | 3 | five |
| >=2 && <3 | 2 | 4 | wate |
| >=3 | 3 | 5 | fiww |
| >=3 | 3 | 6 | www |
| >=3 | 3 | 7 | wfiw |
+---------------+-----------+---------+-----------+
?
select
CASE
WHEN good_type<2
THEN '<2'
WHEN good_type>=2 AND good_type<3
THEN '>=2 && <3' ELSE '>=3'
END AS good_now_type,
count(*) AS num_count
FROM t_main_order
GROUP BY good_now_type
ORDER BY num_count;
+---------------+-----------+
| good_now_type | num_count |
+---------------+-----------+
| >=2 && <3 | 1 |
| <2 | 3 |
| >=3 | 3 |
+---------------+-----------+
?
DATE_FORMAT
GROUP BY
ORDER BY
LIMIT
AS
DATE
UNION
UNION ALL
AND
IN
?