0%

sql常用语法和函数

字符串类

拼接

CONCAT

CONCAT函数用于连接两个字符串,形成一个字符串。

1
2
3
4
5
6
SQL> SELECT CONCAT('FIRST ', 'SECOND');
+----------------------------+
| CONCAT('FIRST ', 'SECOND') |
+----------------------------+
| FIRST SECOND |
+----------------------------+

GROUP_CONCAT

GROUP_CONCAT()函数将组中的字符串连接成为具有各种选项的单个字符串。

1
group_concat([DISTINCT] 要连接的字段 [Order BY  排序字段 ASC/DESC] [Separator '分隔符'])

例题:1484. 按日期分组销售产品!
编写一个 SQL 查询来查找每个日期、销售的不同产品的数量及其名称。
每个日期的销售产品名称应按词典序排列。
返回按sell_date排序的结果表。

1
2
3
select sell_date ,COUNT(DISTINCT product)  as num_sold ,
GROUP_CONCAT(DISTINCT product ORDER BY product ASC SEPARATOR ',') products
from Activities group by sell_date

##查找

LOCATE(substr,str)

LOCATE(substr,str)
第一个语法返回字符串 str中子字符串substr的第一个出现位置。
如若substr 不在str中,则返回值为0。

LEFT(str,length)

LEFT()函数接受两个参数:

  • str是要提取子字符串的字符串。
  • length是一个正整数,指定将从左边返回的字符数。

LEFT()函数返回str字符串中最左边的长度字符。如果str或length参数为NULL,则返回NULL值。
如果length为0或为负,则LEFT函数返回一个空字符串。如果length大于str字符串的长度,则LEFT函数返回整个str字符串。

操作

UNION

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;

1
2
3
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2

UNION ALL

Union All:对两个结果集进行并集操作,包括重复行,不进行排序;

1
2
3
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2

日期

运算

DATEDIFF

DATEDIFF函数接受两个任何有效日期或日期时间值的参数。如果您传递DATETIME或TIMESTAMP值,则DATEDIFF函数仅将日期部分用于计算,并忽略时间部分。
DATEDIFF函数在许多情况下很有用,例如,您可以计算产品需要发送给客户的间隔时间。

1
DATEDIFF(a.recordDate, b.recordDate) = 1

日期相差一天