Mysql小技巧(多行數據合並+模糊查詢


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) 函數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM