1,case when mysql版本的if
這是一個(gè)類似于我們java中的if的sql函數(shù)艘儒,當(dāng)xx的時(shí)候執(zhí)行xx操作
SELECT
bus_scheduling.line_id,
CASE
WHEN bus_scheduling.is_deleted = 1 AND bus_scheduling.scheduling_time > unix_timestamp( DATE( now( ) ) ) THEN
1 ELSE 0
END AS is_scheduling_time
FROM
bus_scheduling
上述的sql的意思是當(dāng)bus_scheduling表的邏輯刪除字段為1并且scheduling_time 的值大于當(dāng)前時(shí)間的時(shí)候我們能給is_scheduling_time 字段賦值為1其余的情況為2
這個(gè)語(yǔ)法可以結(jié)合group by分組使用帝雇,可以解決一些先分組然后再分頁(yè)涮俄,但是分組的條件需要自己組裝的時(shí)候來使用,還可以結(jié)合min和max之類的函數(shù)獲取特殊的最大值最小值
2尸闸,GROUP_CONCAT 分組并拼接
有的時(shí)候業(yè)務(wù)需求彻亲,需要兩個(gè)表或者三個(gè)表的數(shù)據(jù)孕锄,需要根據(jù)主表的數(shù)據(jù)查詢出子表的與之相關(guān)連的某一個(gè)字段的值,如果使用java代碼實(shí)現(xiàn)就通過兩次查詢苞尝,一次查詢主表分頁(yè)畸肆,然后再根據(jù)主表數(shù)據(jù)來查詢滿足條件的子表的數(shù)據(jù),
那如果要求分組的條件需要使用到子表的數(shù)據(jù)代碼又該如何實(shí)現(xiàn)呢宙址?
SELECT
GROUP_CONCAT( bs.scheduling_time ) AS scheduling_times, bl.id
FROM
bus_line bl
LEFT JOIN bus_scheduling bs ON bl.id = bs.line_id
GROUP BY
bl.id
HAVING
scheduling_times IS not NULL
以上sql的意義是關(guān)聯(lián)兩個(gè)表的數(shù)據(jù)并且查詢出子表中的數(shù)據(jù)并整理到一起轴脐,然后再篩選出bus_scheduling 表中沒有bus_line 關(guān)聯(lián)的scheduling_times 字段的數(shù)據(jù),不僅如此我們的GROUP_CONCAT還可以完成排序以及去重的功能抡砂,同時(shí)我們的字段值還可以套用其他的函數(shù)
SELECT
GROUP_CONCAT( CONCAT(bs.scheduling_time,'||',bs.id)) AS scheduling_times, bl.id
FROM
bus_line bl
LEFT JOIN bus_scheduling bs ON bl.id = bs.line_id
GROUP BY
bl.id
HAVING
scheduling_times IS not NULL
#查詢出來的結(jié)果
1632758400||4762,1632758400||4763,1633881600||4764,1633881600||4765,1633968000||4766,1634486400||4767,1634572800||4768,1634572800||4769,1634572800||4770,1634745600||4773,1634745600||4774,1635436800||4808,1639929600||4927,1640966400||5064 733
還可以在GROUP_CONCAT函數(shù)內(nèi)部使用CONCAT函數(shù)拼接出你所需要的信息
GROUP_CONCAT 返回的結(jié)果是每個(gè)分組之前的多個(gè)值拼接然后使用逗號(hào)連接在一起大咱,我們還可以再添加上去重的功能
3,JSON_OBJECT('json屬性', "內(nèi)容")
這個(gè)函數(shù)可以適用于我們將表中的某些字段組裝成json字符串
SELECT JSON_OBJECT("appkey",app_key,"id",id) FROM `trip_order_special`
#返回結(jié)果
{"id": 191926, "appkey": "ee6f87c7f95d4d45"}
拆分的函數(shù)
REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
解析:
string: 需要進(jìn)行正則處理的字符串
pattern:進(jìn)行匹配的正則表達(dá)式
position:起始位置注益,從第幾個(gè)字符開始正則表達(dá)式匹配(默認(rèn)為1)
occurrenec:標(biāo)識(shí)第幾個(gè)匹配組碴巾,默認(rèn)為1
modifier:模式('i'不區(qū)分大小寫進(jìn)行檢索;'c'區(qū)分大小寫進(jìn)行檢索聊浅。默認(rèn)為'c'餐抢。)