序
本文主要記錄下日常略微複雜且比較常用的SQL語句,持續更新……
一、重複數據
查看是否存在重複數據
SELECT `code`, guid, COUNT(1) FROM crosshistory WHERE in_or_out = 1 GROUP BY guid having COUNT(1) > 1
清除重複數據
DELETE FROM crosshistory WHERE `code` in ( SELECT `code` from (SELECT `code` FROM crosshistory WHERE in_or_out = 1 GROUP BY guid having COUNT(1) > 1 ) AS temp )
二、插入/更新
如果數據不存在則執行插入操作,如果數據已經存在則執行更新操作
INSERT INTO visitors(`timestamp`,unique_visitors) VALUES("2021-01-01",10) on DUPLICATE KEY UPDATE `timestamp` = "2021-01-01", unique_visitors = 44;
三、時間格式化
# CONCAT:拼接字符串
# DATE_FORMAT:日期格式化
SELECT value,value1,value2,value3,value4,DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%s') AS createTime,CONCAT(value,value1,DATE_FORMAT(create_time,'%Y%m%d%H%i%s’),value2) AS rowkey FROM table_name
四、字符串處理
// 32號樓a棟__5層__512
// substring_index有分隔字符串的作用,取第一個分隔符前的字符串,結果:32號樓a棟
substring_index(building_code, "__", 1)
// 取第2個分隔符前的字符串,結果:32號樓a棟__5層
substring_index(building_code, "__", 2)
五、IF
// 如果A等於0,返回yes,否則返回no
if(A == 0, yes, no)
六、去除空格
UPDATE config SET event_name = TRIM(event_name)
# 去除左側空格
UPDATE config SET event_name = LTRIM(event_name)
七、生成隨機數
取 20-100之間的隨機數
ROUND(RAND() * 100 + 20)
八、多表聯查--左連接
# 左連接
SELECT a.*, IF(b.equip_name IS null, "設備缺失", b.equip_name) as equip_name FROM operate_alarm_video as a
LEFT JOIN basic_equipment AS b
ON a.signal_id = b.signal_id
WHERE a.data_time >= #{startTime} AND a.data_time < #{stopTime}
九、獲取表的字段
select COLUMN_NAME from information_schema.COLUMNS where table_name = 'user' and table_schema = 'database_name';