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());
獲取上一年數據。。。