SQL Server中将日期类型转字符串的几种常用写法
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">前言</a></li><li><a href="#_label1">1. 使用 CONVERT() 函数(推荐,兼容性好)</a></li><li><a href="#_label2">2. 使用 FORMAT() 函数(SQL Server 2012+,灵活但性能低)</a></li><li><a href="#_label3">3. 拼接 YEAR() / MONTH() / DAY()(兼容老版本)</a></li><li><a href="#_label4">实际应用示例</a></li></ul></div><p class="maodian"><a name="_label0"></a></p><h2>前言</h2><p>在 SQL Server 中,将 日期类型(如 DATE、DATETIME、DATETIME2)转换为字符串,有多种方法,适用于不同版本和格式需求。以下是常用且高效的写法:</p>
<p class="maodian"><a name="_label1"></a></p><h2>1. 使用 CONVERT() 函数(推荐,兼容性好)</h2>
<p>CONVERT 支持多种预定义的 style 编码,可快速格式化日期。</p>
<p>常用格式示例:</p>
<div class="jb51code"><pre class="brush:sql;">DECLARE @dt DATETIME = '2025-11-14 15:30:45';
-- yyyy-MM-dd(标准日期)
SELECT CONVERT(VARCHAR, @dt, 23);-- 结果: '2025-11-14'
-- yyyy-MM-dd HH:mm:ss
SELECT CONVERT(VARCHAR, @dt, 120); -- 结果: '2025-11-14 15:30:45'
-- MM/dd/yyyy
SELECT CONVERT(VARCHAR, @dt, 101); -- 结果: '11/14/2025'
-- dd/MM/yyyy
SELECT CONVERT(VARCHAR, @dt, 103); -- 结果: '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) + '日';
-- 结果: '2025年11月14日'
</pre></div>
<p class="maodian"><a name="_label2"></a></p><h2>2. 使用 FORMAT() 函数(SQL Server 2012+,灵活但性能低)</h2>
<p>适合需要自定义格式或本地化显示(如中文)的场景。</p>
<div class="jb51code"><pre class="brush:sql;">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'
</pre></div>
<p>注意:FORMAT() 性能较差,不要在大数据量查询或 WHERE 条件中使用。</p>
<p class="maodian"><a name="_label3"></a></p><h2>3. 拼接 YEAR() / MONTH() / DAY()(兼容老版本)</h2>
<p>适用于 SQL Server 2008 及更早版本,或需要精确控制补零的情况。</p>
<div class="jb51code"><pre class="brush:sql;">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;
-- 结果: '2025-11-05'
</pre></div>
<p>各方法对比</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202511/2025111908540093.png" /></p>
<p class="maodian"><a name="_label4"></a></p><h2>实际应用示例</h2>
<p>场景:按“年月”分组统计订单(高性能写法)</p>
<div class="jb51code"><pre class="brush:sql;">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;
</pre></div>
<p>错误做法(避免!)</p>
<div class="jb51code"><pre class="brush:sql;">-- 不要这样写:隐式转换不可靠,且格式依赖系统设置
SELECT '' + GETDATE();-- 结果不确定!
-- 不要在 WHERE 中用 FORMAT 或 CONVERT 包裹字段
WHERE FORMAT(OrderDate, 'yyyy-MM') = '2025-11';-- 全表扫描!
</pre></div>
<p>以上就是SQL Server中将日期类型转字符串的几种常用写法的详细内容,更多关于SQL Server日期类型转字符串的资料请关注琼殿技术社区其它相关文章!</p>
頁:
[1]