SQL Server中將日期類型轉(zhuǎn)字符串的幾種常用寫法
前言
在 SQL Server 中,將 日期類型(如 DATE、DATETIME、DATETIME2)轉(zhuǎn)換為字符串,有多種方法,適用于不同版本和格式需求。以下是常用且高效的寫法:
1. 使用 CONVERT() 函數(shù)(推薦,兼容性好)
CONVERT 支持多種預(yù)定義的 style 編碼,可快速格式化日期。
常用格式示例:
DECLARE @dt DATETIME = '2025-11-14 15:30:45';
-- yyyy-MM-dd(標(biāo)準(zhǔn)日期)
SELECT CONVERT(VARCHAR, @dt, 23); -- 結(jié)果: '2025-11-14'
-- yyyy-MM-dd HH:mm:ss
SELECT CONVERT(VARCHAR, @dt, 120); -- 結(jié)果: '2025-11-14 15:30:45'
-- MM/dd/yyyy
SELECT CONVERT(VARCHAR, @dt, 101); -- 結(jié)果: '11/14/2025'
-- dd/MM/yyyy
SELECT CONVERT(VARCHAR, @dt, 103); -- 結(jié)果: '14/11/2025'
-- yyyy年MM月dd日(需拼接)
SELECT
CAST(YEAR(@dt) AS VARCHAR) + '年' +
RIGHT('0' + CAST(MONTH(@dt) AS VARCHAR), 2) + '月' +
RIGHT('0' + CAST(DAY(@dt) AS VARCHAR), 2) + '日';
-- 結(jié)果: '2025年11月14日'
2. 使用 FORMAT() 函數(shù)(SQL Server 2012+,靈活但性能低)
適合需要自定義格式或本地化顯示(如中文)的場(chǎng)景。
DECLARE @dt DATETIME = '2025-11-14 15:30:45'; SELECT FORMAT(@dt, 'yyyy-MM-dd'); -- '2025-11-14' SELECT FORMAT(@dt, 'yyyy/MM/dd'); -- '2025/11/14' SELECT FORMAT(@dt, 'yyyy年MM月dd日'); -- '2025年11月14日' SELECT FORMAT(@dt, 'MMM dd, yyyy'); -- 'Nov 14, 2025' SELECT FORMAT(@dt, 'dddd, MMMM dd', 'zh-CN'); -- '星期五, 十一月 14'
注意:FORMAT() 性能較差,不要在大數(shù)據(jù)量查詢或 WHERE 條件中使用。
3. 拼接 YEAR() / MONTH() / DAY()(兼容老版本)
適用于 SQL Server 2008 及更早版本,或需要精確控制補(bǔ)零的情況。
DECLARE @dt DATE = '2025-11-05';
SELECT
CAST(YEAR(@dt) AS VARCHAR(4)) + '-' +
RIGHT('0' + CAST(MONTH(@dt) AS VARCHAR(2)), 2) + '-' +
RIGHT('0' + CAST(DAY(@dt) AS VARCHAR(2)), 2) AS FormattedDate;
-- 結(jié)果: '2025-11-05'
各方法對(duì)比

實(shí)際應(yīng)用示例
場(chǎng)景:按“年月”分組統(tǒng)計(jì)訂單(高性能寫法)
SELECT
LEFT(CONVERT(VARCHAR, OrderDate, 23), 7) AS YearMonth,
COUNT(*) AS OrderCount
FROM Orders
GROUP BY LEFT(CONVERT(VARCHAR, OrderDate, 23), 7)
ORDER BY YearMonth;
錯(cuò)誤做法(避免!)
-- 不要這樣寫:隱式轉(zhuǎn)換不可靠,且格式依賴系統(tǒng)設(shè)置 SELECT '' + GETDATE(); -- 結(jié)果不確定! -- 不要在 WHERE 中用 FORMAT 或 CONVERT 包裹字段 WHERE FORMAT(OrderDate, 'yyyy-MM') = '2025-11'; -- 全表掃描!
以上就是SQL Server中將日期類型轉(zhuǎn)字符串的幾種常用寫法的詳細(xì)內(nèi)容,更多關(guān)于SQL Server日期類型轉(zhuǎn)字符串的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
sqlserver索引的原理及索引建立的注意事項(xiàng)小結(jié)
本文起點(diǎn)可能會(huì)相對(duì)高點(diǎn),首先你的很熟悉索引以及他們的存儲(chǔ)結(jié)構(gòu) 有很多地方你可能覺得有異議,歡迎一起討論2012-07-07
ACCESS數(shù)據(jù)庫(kù)的壓縮,備份,還原,下載,刪除的實(shí)現(xiàn)
ACCESS數(shù)據(jù)庫(kù)的壓縮,備份,還原,下載,刪除的實(shí)現(xiàn)...2006-08-08
如何驗(yàn)證會(huì)員系統(tǒng)中用戶的郵箱是否真實(shí)存在
在開發(fā)網(wǎng)站時(shí),我們需要對(duì)用戶注冊(cè)的郵箱進(jìn)行核對(duì)與驗(yàn)證,用戶填寫的郵箱是否有效郵箱。這篇文章主要介紹了如何驗(yàn)證會(huì)員系統(tǒng)中用戶的郵箱是否真實(shí)存在的相關(guān)資料,需要的朋友可以參考下2016-10-10
Navicat連接SQL Server報(bào)錯(cuò)[08001]超時(shí)錯(cuò)誤(258)的完整排查與解決方案
在使用?Navicat 17.3.6?連接?SQL Server 2012?時(shí),反復(fù)出現(xiàn)連接超時(shí)錯(cuò)誤(錯(cuò)誤代碼 258),但同一臺(tái)機(jī)器上使用?IntelliJ IDEA 的 Database 工具卻能正常連接,本文給大家介紹了完整排查與解決方案,需要的朋友可以參考下2025-11-11

