如何在SQL中格式化日期與數字的完整指南

作者:帆軟行業化團隊

2025年7月04日 · 14 min read

來源:帆軟
sql format.webp

你想快速調整日期或數字的顯示方式嗎?在SQL格式調整中,你可以使用不同的函數。例如,SQL Server支援FORMAT和CONVERT,MySQL則常用DATE_FORMAT。這些語法能將資料轉換成你需要的字串格式。你只要選對資料庫和函數,就能讓查詢結果更清楚、更易讀。

核心要點

  • 不同資料庫使用不同函數格式化日期與數字,選擇前請先確認資料庫類型。
  • SQL格式化能讓日期和數字顯示更清楚,方便報表和前端呈現。
  • SQL Server常用FORMAT和CONVERT函數,MySQL則以DATE_FORMAT和FORMAT為主。
  • 格式化時要注意格式字串正確,避免出現NULL或錯誤結果。
  • 大量資料建議在SQL查詢階段完成格式化,提升查詢效能並減少前端負擔。

SQL格式概述

你在查詢資料時,常常會遇到日期或數字顯示不夠直觀的情況。這時候,SQL格式就能幫助你把資料轉換成更容易閱讀的樣子。你可以用SQL格式來調整日期的排列順序,或是讓數字加上千分位,甚至顯示成貨幣格式。這些技巧在報表、資料分析、或是前端顯示時都很實用。

常用語法

你會發現,不同的資料庫有不同的格式化函數。以下是幾個常見的語法:

函數名稱支援資料庫用途範例
FORMATSQL Server, MySQL數字、日期格式化
DATE_FORMATMySQL日期格式化
CONVERTSQL Server日期、數字轉字串
TO_CHAROracle, PostgreSQL日期、數字格式化

小提醒:你在選擇語法時,記得先確認自己的資料庫類型。不同資料庫支援的函數不一樣。

適用情境

你在下列情境會常用到SQL格式:

  1. 你需要將日期顯示成「2024-06-01」這種格式。
  2. 你想讓金額顯示成「1,000,000」。
  3. 你要把資料轉成字串,方便前端顯示或匯出報表。

SQL格式的基本原則,就是把原本的資料轉換成你想要的字串格式。這樣一來,你的查詢結果會更清楚,資料也更容易被理解。

SQL Server格式化

SQL Server格式化
SQL Server格式化

你在SQL Server中,常常需要調整日期和數字的顯示方式。這時,你可以使用幾個常見的函數來達到目的。最常用的有FORMAT、CONVERT和CAST。這些函數各有特色,能幫助你靈活處理SQL格式。

日期格式化

你想把日期顯示成「2024-06-01」或「06/01/2024」嗎?你可以用FORMAT或CONVERT來達成。FORMAT函數語法簡單,支援多種格式字串和文化特性。CONVERT則適合需要指定style參數的情境。

  • FORMAT語法

    SELECT FORMAT(GETDATE(), 'yyyy-MM-dd') AS 日期格式;
    

    這樣你會得到「2024-06-01」這種格式。你也可以加上文化特性:

    SELECT FORMAT(GETDATE(), 'D', 'en-US') AS 日期格式;
    

    這會顯示英文完整日期。

  • CONVERT語法

    SELECT CONVERT(varchar, GETDATE(), 23) AS 日期格式;
    

    style參數23代表「yyyy-mm-dd」格式。你可以查表選擇不同的style。

  • CAST語法
    CAST主要用於資料型別轉換,不太適合複雜格式化。

    SELECT CAST(GETDATE() AS varchar) AS 日期格式;
    

    這會得到預設格式,較少用於精確控制SQL格式。

小提醒:你在處理大量資料時,建議將日期格式化運算放在SQL查詢階段。這樣可以減少報表端的運算壓力,提升整體效能。Power BI等工具在處理超過百萬筆資料時,若將格式化留在報表端,效能會明顯下降。

數字格式化

你想讓數字加上千分位或顯示成貨幣嗎?你可以用FORMAT函數來處理。這樣查詢結果會更直觀。

  • FORMAT語法

    SELECT FORMAT(1234567.89, '#,##0.00') AS 數字格式;
    

    這會顯示「1,234,567.89」。你也可以加上文化特性:

    SELECT FORMAT(1234567.89, 'C', 'zh-TW') AS 金額格式;
    

    這會顯示「NT$1,234,567.89」。

  • CONVERT與CAST
    這兩個函數主要用於型別轉換,格式化數字時較少用。你可以用它們將數字轉成字串,但無法直接加上千分位。
  • 常見錯誤
    你在使用FORMAT時,若格式字串拼錯,會得到NULL。CONVERT的style參數若選錯,也可能顯示不正確。你要特別注意格式字串和參數的正確性。
  • 效能建議
    處理大量數字資料時,你應該把聚合和格式化工作放在SQL Server端。這樣可以減少報表端的負擔,讓查詢速度更快。你在匯出大量資料時,選擇CSV格式也能提升效能。

小提醒:你在設計SQL格式時,記得考慮文化特性。不同地區的日期和數字格式不一樣。你可以用FORMAT的第三個參數指定語系,讓查詢結果更符合需求。

你只要善用這些函數,就能靈活調整SQL格式,讓資料更清楚易懂。你也能避免常見的效能陷阱,讓查詢更順暢。

MySQL格式化

MySQL格式化
MySQL格式化

你在MySQL中,經常需要調整日期和數字的顯示方式。這樣可以讓查詢結果更容易閱讀,也能符合報表或前端的需求。MySQL提供多種函數,讓你靈活處理SQL格式。

日期格式

你想把日期顯示成「2024-06-01」或「2024年6月1日」嗎?你可以使用DATE_FORMAT函數。這個函數能將日期轉換成你想要的字串格式。你只要指定格式字串,就能得到不同的顯示效果。

  • DATE_FORMAT語法

    SELECT DATE_FORMAT(日期欄位, '格式字串') AS 新日期格式;
    

    你可以用下表的格式符號組合出各種日期樣式:

    格式符號說明範例結果
    %Y四位數年份2024
    %m月份(兩位)06
    %d日期(兩位)01
    %H24小時制小時14
    %i分鐘30
    %s秒數45
    %W星期幾Sunday
    %M英文月份June
  • 常見DATE_FORMAT範例
    • SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');
      結果:Sunday October 2009
    • SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s');
      結果:22:23:00
    • SELECT DATE_FORMAT('1900-10-04 22:23:00', '%D %y %a %d %m %b %j');
      結果:4th 00 Thu 04 10 Oct 277
    • SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H %k %I %r %T %S %w');
      結果:22 22 10 10:23:00 PM 22:23:00 00 6
    • SELECT DATE_FORMAT('1999-01-01', '%X %V');
      結果:1998 52
    • SELECT DATE_FORMAT('2006-06-00', '%d');
      結果:00

你也可以用STR_TO_DATE將字串轉回日期型別。這對於匯入資料或資料清理很有幫助。

  • STR_TO_DATE語法

    SELECT STR_TO_DATE('2024-06-01', '%Y-%m-%d') AS 轉換後日期;
    

    你只要格式字串與原始資料一致,就能正確轉換。

小提醒:你在設計輸入格式時,建議提供範例或下拉選單,幫助使用者輸入正確的日期。這樣可以減少錯誤發生,也能提升查詢成功率。

數字格式

你想讓數字加上千分位或顯示成固定小數點嗎?你可以用FORMAT函數。這個函數能將數字轉成字串,並自動加上千分位。

  • FORMAT語法

    SELECT FORMAT(1234567.89, 2) AS 數字格式;
    

    結果會是1,234,567.89。你可以指定小數點位數,讓金額或統計數字更清楚。

  • FORMAT常見用法
    • SELECT FORMAT(9876543.21, 0); 結果:9,876,543
    • SELECT FORMAT(1234.5, 3); 結果:1,234.500

注意事項:你在使用FORMAT時,結果會是字串型別。如果你需要進行數學運算,請記得先轉回數字型別。

你在設計SQL格式時,也要注意MySQL的限制。例如,FORMAT只支援數字格式化,無法直接處理日期。DATE_FORMAT與STR_TO_DATE的格式字串必須完全符合資料內容,否則會出現NULL或錯誤結果。

  • 常見錯誤與建議
    1. 你應該明確標示輸入格式,避免用戶輸入錯誤。
    2. 你可以提供下拉選單或格式提示,幫助用戶正確選擇日期。
    3. 你要及時驗證輸入內容,減少查詢失敗。
    4. 你可以動態顯示可選日期,避免選到不存在的日期。
    5. 你應該優化查詢流程,避免重複提交,提升體驗。

你只要善用這些函數,就能靈活調整MySQL的日期與數字顯示方式。這樣查詢結果會更清楚,資料也更容易被理解。你也能減少錯誤發生,提升資料處理效率。

常見SQL格式代碼

你在學習SQL格式時,常常會遇到不同資料庫的格式代碼。這些代碼能幫助你把日期和數字轉成你想要的樣子。你只要記住常用的格式代碼,就能快速完成查詢。

日期格式代碼

你可以用下表來查找常見的日期格式代碼。不同資料庫有些差異,你要特別注意。

格式代碼SQL Server/Oracle/PostgreSQLMySQL說明
YYYYyyyy%Y四位數年份
MMMM%m月份(兩位)
DDdd%d日期(兩位)
HH24/HHHH24/HH%H小時(24制)
MImi%i分鐘
SSss%s秒數

小提醒:你在MySQL裡要加上「%」符號,像是「%Y-%m-%d」。在SQL Server、Oracle、PostgreSQL裡不用加「%」。

你可以參考這個查詢範例:

-- SQL Server
SELECT FORMAT(GETDATE(), 'yyyy/MM/dd') AS 日期格式;

-- MySQL
SELECT DATE_FORMAT(NOW(), '%Y/%m/%d') AS 日期格式;

數字格式代碼

你在格式化數字時,可以用這些常見代碼:

格式代碼SQL Server/MySQL/Oracle說明
#,##0支援千分位、整數
#,##0.00支援千分位、兩位小數
0支援補零
C支援貨幣格式

你可以用這個查詢範例:

-- SQL Server
SELECT FORMAT(1234567.89, '#,##0.00') AS 數字格式;

-- MySQL
SELECT FORMAT(1234567.89, 2) AS 數字格式;

 注意事項:你在不同資料庫使用SQL格式時,要確認格式代碼是否支援。有些進階格式只在特定資料庫有效。

你只要熟悉這些格式代碼,就能讓查詢結果更清楚。這樣你在做報表或資料分析時會更有效率。

進階應用與注意事項

文化特性與本地化

你在處理國際化資料時,常常會遇到不同國家或地區的日期與數字格式。例如,美國常用「MM/dd/yyyy」,台灣則習慣「yyyy/MM/dd」。你可以利用SQL的格式化函數,指定語系或地區參數,讓查詢結果符合當地習慣。

語系代碼說明範例格式
en-US美國英文06/01/2024
zh-TW台灣中文2024/06/01
ja-JP日本語2024/06/01

你在SQL Server中,可以用FORMAT的第三個參數指定語系:

SELECT FORMAT(GETDATE(), 'D', 'zh-TW') AS 日期格式;

你在MySQL中,雖然DATE_FORMAT不支援語系參數,但你可以在應用程式端處理本地化顯示。

 小提醒:你在設計多語系系統時,建議統一儲存格式(如ISO 8601),顯示時再根據用戶語系格式化。

效能與常見錯誤

你在查詢大量資料時,格式化運算會影響效能。你應該盡量在查詢階段完成格式化,減少前端或報表工具的負擔。你在使用FORMAT或DATE_FORMAT時,記得這些函數會讓查詢速度變慢,尤其在大數據量時更明顯。

常見錯誤包括:

  • 格式字串拼寫錯誤,導致結果為NULL。
  • style參數選錯,顯示不符預期。
  • 忘記考慮語系,導致顯示不正確。

你可以利用Navicat等工具,直接在查詢視窗預覽格式化結果。這些工具支援SQL格式化語法,讓你更快發現錯誤。

 注意事項:你在優化查詢時,建議先測試格式化語法對效能的影響,再決定是否在SQL層處理。

 

你已經學會如何用SQL格式調整日期和數字。你在實務上應該先確認資料庫支援的語法,再選擇合適的函數。遇到格式錯誤時,請檢查格式字串。

建議你多參考官方文件或SQL教學資源,這樣可以避免常見陷阱,也能提升查詢效率。

FAQ

SQL格式化會改變原始資料嗎?

不會。你在查詢時格式化資料,只會影響顯示結果。原始資料不會被修改。

我可以同時格式化多個欄位嗎?

你可以在同一個查詢中格式化多個欄位。只要在 SELECT 裡分別寫出每個格式化函數即可。

為什麼FORMAT函數有時會回傳NULL?

你輸入的格式字串如果拼錯,或資料型別不正確,FORMAT 會回傳 NULL。請檢查格式與資料型別。

MySQL可以直接格式化貨幣嗎?

MySQL 的 FORMAT 函數可以加上千分位和小數點。你需要在應用程式端加上貨幣符號。

格式化會影響查詢速度嗎?

格式化函數會增加查詢運算。你在處理大量資料時,查詢速度可能會變慢。建議先測試效能。

帆軟產品免費試用

企業戰情室報表軟體

企業戰情室報表軟體

複雜報表/戰情室/資料填報/數位孿生

企業商業智慧BI軟體

企業商業智慧BI軟體

自助資料處理/Dashboard/探索分析

一站式資料整合平台

一站式資料整合平台

資料同步/ETL資料開發/API資料服務

免費資源下載

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

我們很樂意傾聽你的需求,解答您的疑問,並提供專業建議, 助力您的企業實現智慧轉型!

×

意見回饋

姓名

電郵

公司

國家/地區

-- select an option --

電話

投訴原因

請選擇投訴原因

代理商問題
產品問題
技術支援服務問題
專案問題
銷售問題
商務問題
行銷問題
其他

投訴內容