前言
在 sql server 中,将 日期类型(如 date、datetime、datetime2)转换为字符串,有多种方法,适用于不同版本和格式需求。以下是常用且高效的写法:
1. 使用 convert() 函数(推荐,兼容性好)
convert 支持多种预定义的 style 编码,可快速格式化日期。
常用格式示例:
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日'
2. 使用 format() 函数(sql server 2012+,灵活但性能低)
适合需要自定义格式或本地化显示(如中文)的场景。
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() 性能较差,不要在大数据量查询或 where 条件中使用。
3. 拼接 year() / month() / day()(兼容老版本)
适用于 sql server 2008 及更早版本,或需要精确控制补零的情况。
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'
各方法对比

实际应用示例
场景:按“年月”分组统计订单(高性能写法)
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;
错误做法(避免!)
-- 不要这样写:隐式转换不可靠,且格式依赖系统设置 select '' + getdate(); -- 结果不确定! -- 不要在 where 中用 format 或 convert 包裹字段 where format(orderdate, 'yyyy-mm') = '2025-11'; -- 全表扫描!
以上就是sql server中将日期类型转字符串的几种常用写法的详细内容,更多关于sql server日期类型转字符串的资料请关注代码网其它相关文章!
发表评论