許多資料處理任務僅靠 MySQL 原生語句即可高效完成,無須外層程式語言協助。本文整理工作中高頻使用的實用語句,涵蓋年齡計算、時間差、重複值查找、工作日統計、主鍵查詢、資料庫大小檢視等場景。
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW()) - TO_DAYS(@dateofbirth)), '%Y') + 0;
原理:以天數差轉為日期,再取年份部分,+0 強制轉數值。
UNIX_TIMESTAMP(dt2) - UNIX_TIMESTAMP(dt1) -- 秒數
/ 60 -- 分鐘數
/ 3600 -- 小時數
/ 86400 -- 天數
適用於 'YYYY-MM-DD HH:MM:SS' 格式的 DATETIME 欄位。
SELECT id
FROM tbl
GROUP BY id
HAVING COUNT(*) = N;
利用 GROUP BY + HAVING 過濾聚合結果。
SELECT COUNT(*)
FROM calendar
WHERE d BETWEEN @Start AND @Stop
AND DAYOFWEEK(d) NOT IN (1,7) -- 排除週日(1)與週六(7)
AND holiday = 0; -- 排除假日
需預備一張 calendar 表,含日期欄位 d 與假日標記 holiday。
SELECT k.column_name
FROM information_schema.table_constraints t
JOIN information_schema.key_column_usage k
USING (constraint_name, table_schema, table_name)
WHERE t.constraint_type = 'PRIMARY KEY'
AND t.table_schema = 'db_name'
AND t.table_name = 'tbl_name';
透過 information_schema 元資料表獲取結構資訊。
SELECT
table_schema AS 'Db Name',
ROUND(SUM(data_length + index_length) / 1024 / 1024, 3) AS 'Db Size (MB)',
ROUND(SUM(data_free) / 1024 / 1024, 3) AS 'Free Space (MB)'
FROM information_schema.tables
GROUP BY table_schema;
快速掌握實例級儲存佔用情況,利於容量規劃。
熟練掌握上述語句,能大幅減少應用層程式碼,降低網路傳輸與解析開銷,讓資料庫發揮原生計算優勢。實務中請根據具體業務調整參數與表名。