文章目錄
- 1.select后對表進行修改(delete)
- 2.函數GROUP_CONCAT()
- 3.使用正則表達式
- 3.DATE_FORMAT()
- 4.count() 加條件
1.select后對表進行修改(delete)
報錯:You can’t specify target table ‘Person’ for update in FROM clause
原因:mysql不能在同一語句中先select出同一表中的某些值,然后對這個表做修改
錯誤寫法
delete from Person
where id not in(select min(id) idfrom Person group by email
)
解決方法:添加臨時表
正確寫法
delete from Person
where id not in(select * from (select min(id) idfrom Person group by email ) t1
)
2.函數GROUP_CONCAT()
我們可以使用函數 GROUP_CONCAT() 將多行中的多個值組合成一個字符串。下面顯示了 GROUP_CONCAT() 函數的語法:
GROUP_CONCAT(DISTINCT 字段 ----去重ORDER BY 字段 ----ASC/DESCSEPARATOR sep ---分隔符: SEPARATOR ','
);
用例
select sell_date ,count(distinct product) num_sold ,group_concat(distinct product separator ',') products
from Activities
group by sell_date
3.使用正則表達式
思路
一般來說,如果你被要求匹配一個字符串,應該最先想到寫一個正則表達式模式進行匹配。
正則表達式提供各種功能,以下是一些相關功能:
正則表達式書寫格式 |
---|
^:表示一個字符串或行的開頭 |
[a-z]:表示一個字符范圍,匹配從 a 到 z 的任何字符。 |
[0-9]:表示一個字符范圍,匹配從 0 到 9 的任何字符。 |
[a-zA-Z]:這個變量匹配從 a 到 z 或 A 到 Z 的任何字符。請注意,你可以在方括號內指定的字符范圍的數量沒有限制,您可以添加想要匹配的其他字符或范圍。 |
[^a-z]:這個變量匹配不在 a 到 z 范圍內的任何字符。請注意,字符 ^ 用來否定字符范圍,它在方括號內的含義與它的方括號外表示開始的含義不同。 |
[a-z]*:表示一個字符范圍,匹配從 a 到 z 的任何字符 0 次或多次。 |
[a-z]+:表示一個字符范圍,匹配從 a 到 z 的任何字符 1 次或多次。 |
.:匹配任意一個字符。 |
\.:表示句點字符。請注意,反斜杠用于轉義句點字符,因為句點字符在正則表達式中具有特殊含義。還要注意,在許多語言中,你需要轉義反斜杠本身,因此需要使用\.。 |
$:表示一個字符串或行的結尾。 |
例子
SELECT user_id, name, mail
FROM Users
-- 請注意,我們還轉義了`@`字符,因為它在某些正則表達式中具有特殊意義
WHERE mail REGEXP '^[a-zA-Z][a-zA-Z0-9_.-]*\\@leetcode\\.com$';
3.DATE_FORMAT()
將日期值格式化為特定格式,請使用DATE_FORMAT函數。 DATE_FORMAT函數的語法如下:
DATE_FORMAT(date,format); ---date 字段,format 需要格式
DATE_FORMAT(trans_date,'%Y-%m') ---%Y-%m 2023-08
format | date |
---|---|
%D | 英文后綴如:0th, 1st, 2nd等的一個月之中的第幾天 |
%d | 如果是1個數字(小于10),那么一個月之中的第幾天表示為加前導加0, 如:00, 01,02, …31 |
%H | 24小時格式的小時,前導加0,例如:00,01…23 |
%h | 小時,12小時格式,帶前導零,例如:01,02 … 12 |
%Y | 表示年份,四位數,例如2000,2001 |
%y | 表示年份,兩位數,例如00,01 |
%m | 具有前導零的月份名稱,例如:00,01,02,… 12 |
%M | 月份全名稱,例如:January, February,…December |
format | date |
---|---|
%Y-%m-%d | 2017/04/30 |
%Y-%m | 2017/04 |
4.count() 加條件
-
COUNT( state=‘approved’ OR NULL ) >需要在后面 + or null
-
COUNT( IF (state = ‘approved’, 1, NULL ) )
需要注意的是,count只有在字段數據為NULL時才不計入數量,如果IF (state = ‘approved’, 1, NULL ) 改為IF (state = ‘approved’, 1, 0 ) ,那么非 approved的數據也會被計入其中導致錯誤。