1.多行數據合並

使用GROUP_CONCAT函數后的效果

需注意:
1.GROUP_CONCAT()中的值為你要合並的數據的字段名;
SEPARATOR 函數是用來分隔這些要合並的數據的;
' '中是你要用哪個符號來分隔;
2.必須要用GROUP BY 語句來進行分組管理,不然所有的數據都會被合並成一條記錄

2.模糊查詢
關於條件,SQL提供了四種匹配模式:
1,% :表示任意0個或多個字符。可匹配任意類型和長度的字符,有些情況下若是中文,請使用兩個百分號(%%)表示。
比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'
將會把u_name為“張三”,“張貓三”、“三腳貓”,“唐三藏”等等有“三”的記錄全找出來。
另外,如果需要找出u_name中既有“三”又有“貓”的記錄,請使用and條件
SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%貓%'
若使用 SELECT * FROM [user] WHERE u_name LIKE '%三%貓%'
雖然能搜索出“三腳貓”,但不能搜索出符合條件的“張貓三”。
2,_ : 表示任意單個字符。匹配單個任意字符,它常用來限制表達式的字符長度語句:
比如 SELECT * FROM [user] WHERE u_name LIKE '_三_'
只找出“唐三藏”這樣u_name為三個字且中間一個字是“三”的;
再比如 SELECT * FROM [user] WHERE u_name LIKE '三__';
只找出“三腳貓”這樣name為三個字且第一個字是“三”的;
3,[ ] :表示括號內所列字符中的一個(類似正則表達式)。指定一個字符、字符串或范圍,要求所匹配對象為它們中的任一個。
比如 SELECT * FROM [user] WHERE u_name LIKE '[張李王]三'
將找出“張三”、“李三”、“王三”(而不是“張李王三”);
如 [ ] 內有一系列字符(01234、abcde之類的)則可略寫為“0-4”、“a-e”
SELECT * FROM [user] WHERE u_name LIKE '老[1-9]'
將找出“老1”、“老2”、……、“老9”;
4,[^ ] :表示不在括號所列之內的單個字符。其取值和 [] 相同,但它要求所匹配對象為指定字符以外的任一個字符。
比如 SELECT * FROM [user] WHERE u_name LIKE '[^張李王]三'
將找出不姓“張”、“李”、“王”的“趙三”、“孫三”等;
SELECT * FROM [user] WHERE u_name LIKE '老[^1-4]';
將排除“老1”到“老4”,尋找“老5”、“老6”、……
5.concat()函數
在實際的使用中,條件是作為參數傳遞進來的。 所以我們使用 concat() 函數
mybatis: select * from user where name like concat(“%”, #{name},”%”)
3.多列數據合成一列

多列合並成一列,取平均值

多行合並成一條數據

4.sql語句中類型轉換
CAST(value as type); CONVERT(value, type);
就是CAST(xxx AS 類型), CONVERT(xxx,類型)。
可以轉換的類型是有限制的。這個類型可以是以下值其中的一個:
- 二進制,同帶binary前綴的效果 : BINARY
- 字符型,可帶參數 : CHAR()
- 日期 : DATE
- 時間: TIME
- 日期時間型 : DATETIME
- 浮點數 : DECIMAL
- 整數 : SIGNED
- 無符號整數 : UNSIGNED
5.DATE_SUB() 函數從日期減去指定的時間間隔
語法
DATE_SUB(date,INTERVAL expr type)
date 參數是合法的日期表達式。expr 參數是您希望添加的時間間隔。
type 參數可以是下列值:
| Type 值 |
|---|
| MICROSECOND(微秒) |
| SECOND(秒) |
| MINUTE(分) |
| HOUR(小時) |
| DAY(天數) |
| WEEK(周) |
| MONTH(月) |
| QUARTER(季度) |
| YEAR(年) |
| SECOND_MICROSECOND |
| MINUTE_MICROSECOND |
| MINUTE_SECOND |
| HOUR_MICROSECOND |
| HOUR_SECOND |
| HOUR_MINUTE |
| DAY_MICROSECOND |
| DAY_SECOND |
| DAY_MINUTE |
| DAY_HOUR |
| YEAR_MONTH |
實例:
1.昨天數據

2.30天前到今天的數據

3.90天前到今天的數據

DATE( now() ) 把時間格式化成 2016-01-12
6.獲取當前時間函數
select now();//獲得當前時間 格式:2016-01-12 23:21:33 select curdate();//獲得當前時間 格式: 2016-01-12 select curtime();//獲得當前時間 格式:23:19:43
7.QUARTER函數
獲取本季度的數據

獲取上一季度數據

獲取本年數據
select * from 表名 where YEAR(時間字段名)=YEAR(NOW());
獲取上一年數據。。。
8.空值替換為0
IFNULL(expr1,expr2) 函數

