当前位置: 代码网 > it编程>数据库>MsSqlserver > SQL Server中设置日期显示格式的四种方法

SQL Server中设置日期显示格式的四种方法

2026年03月31日 MsSqlserver 我要评论
sql server 中日期的显示格式设置方法,我会从基础格式转换(convert/format 函数)、常用格式示例、自定义格式和全局设置四个维度讲解,覆盖日常开发中所有常见的日期显示场景。一、核心

sql server 中日期的显示格式设置方法,我会从基础格式转换(convert/format 函数)常用格式示例自定义格式全局设置四个维度讲解,覆盖日常开发中所有常见的日期显示场景。

一、核心函数:convert(兼容所有版本,推荐)

convert 是 sql server 最基础、兼容性最好的日期格式转换函数,语法:

convert(目标类型, 日期值, 格式代码) 
  • 目标类型:通常为 varchar/nvarchar(如 varchar(20));
  • 格式代码:sql server 预定义的数字编码,对应不同日期格式。

1. 最常用的预定义格式(必记)

declare @date datetime = getdate(); -- 当前日期时间
-- 1. 仅日期(yyyy-mm-dd):格式代码 23
select convert(varchar(10), @date, 23) as 日期_yyyymmdd; -- 输出:2026-02-27
-- 2. 仅时间(hh:mi:ss):格式代码 8
select convert(varchar(8), @date, 8) as 时间_hhmmss; -- 输出:15:30:45
-- 3. 日期+时间(yyyy-mm-dd hh:mi:ss):格式代码 120
select convert(varchar(19), @date, 120) as 日期时间_完整; -- 输出:2026-02-27 15:30:45
-- 4. 纯数字日期(yyyymmdd):格式代码 112
select convert(varchar(8), @date, 112) as 日期_纯数字; -- 输出:20260227(适配你的分表名)
-- 5. 中文格式(yyyy年mm月dd日):格式代码 111 + 替换符号
select replace(replace(convert(varchar(10), @date, 111), '/', '年'), '/', '月') + '日' as 日期_中文;
-- 输出:2026年02月27日
-- 6. 带毫秒的时间(hh:mi:ss.mmm):格式代码 121
select convert(varchar(23), @date, 121) as 日期时间_带毫秒; -- 输出:2026-02-27 15:30:45.123

2. 常用格式代码速查表

格式代码格式示例适用场景
815:30:45仅显示时间
1002-27-26美式短日期(mm-dd-yy)
232026-02-27标准日期(推荐)
10102/27/2026美式日期(mm/dd/yyyy)
11220260227纯数字日期(分表名 / 文件名)
1202026-02-27 15:30:45标准日期时间(推荐)
1212026-02-27 15:30:45.123带毫秒的日期时间

二、灵活自定义:format 函数(sql server 2012+)

format 函数支持自定义格式字符串(和 c#/.net 的日期格式一致),灵活性更高,语法:

format(日期值, '自定义格式', '区域设置') 

1. 常用自定义格式示例

declare @date datetime = getdate();
-- 1. 自定义日期(yyyy年mm月dd日 hh时mi分ss秒)
select format(@date, 'yyyy年mm月dd日 hh时mm分ss秒') as 日期_中文完整;
-- 输出:2026年02月27日 15时30分45秒
-- 2. 短日期(yy-mm-dd)
select format(@date, 'yy-mm-dd') as 日期_短格式; -- 输出:26-02-27
-- 3. 星期几
select format(@date, 'dddd') as 星期_英文; -- 输出:friday
select format(@date, 'dddd', 'zh-cn') as 星期_中文; -- 输出:星期五
-- 4. 月份名称
select format(@date, 'mmmm', 'zh-cn') as 月份_中文; -- 输出:二月
-- 5. 24小时制/12小时制
select format(@date, 'hh:mm:ss tt') as 时间_12小时制; -- 输出:03:30:45 下午
select format(@date, 'hh:mm:ss') as 时间_24小时制; -- 输出:15:30:45

2. 自定义格式符速查表

格式符说明示例
yyyy4 位年2026
yy2 位年26
mm2 位月(补 0)02
m1 位月(不补 0)2
dd2 位日(补 0)27
d1 位日(不补 0)27
hh24 小时制(补 0)15
hh12 小时制(补 0)03
mm分钟(补 0)30
ss秒(补 0)45
fff毫秒123
tt上午 / 下午(12 小时制)下午

三、全局格式设置(影响会话 / 服务器)

如果希望整个会话 / 服务器的日期显示格式统一,可修改 dateformat 或服务器配置:

1. 会话级设置(仅当前连接有效)

-- 设置日期解析/显示的顺序:年-月-日(dmy=日-月-年,mdy=月-日-年)
set dateformat ymd;
-- 设置语言(影响日期的中文/英文显示)
set language chinese; -- 中文
-- set language english; -- 英文
-- 验证:默认显示格式会随语言变化
select getdate() as 默认日期格式;

2. 服务器级设置(需管理员权限)

通过 ssms 修改:

  1. 右键服务器 → 「属性」→ 「高级」;
  2. 找到「默认语言」「日期格式」,修改后重启 sql server 服务。

不建议修改服务器级格式,容易影响其他业务,优先用 convert/format 局部转换。

四、实战场景示例

场景 1:生成分表名(如 defectresult2026021)

-- 获取当前年月的纯数字格式,拼接到分表名
declare @tablename nvarchar(100);
set @tablename = n'defectresult' + convert(varchar(6), getdate(), 112) + n'1';
select @tablename as 分表名; -- 输出:defectresult2026021

场景 2:查询结果显示中文日期

-- 查询订单表,显示中文格式的下单时间
select 
    orderid,
    format(createtime, 'yyyy年mm月dd日 hh:mm:ss', 'zh-cn') as 下单时间,
    format(createtime, 'dddd', 'zh-cn') as 下单星期
from orders;

场景 3:按指定格式筛选日期

-- 筛选2026年2月的订单(用112格式避免格式冲突)
select * 
from orders
where convert(varchar(6), createtime, 112) = '202602';

五、避坑点

  1. 避免直接比较字符串日期:❌ 错误:where convert(varchar(10), createtime, 23) = '2026-02-27'✅ 正确:where createtime >= '2026-02-27' and createtime < '2026-02-28'(直接比较日期类型,利用索引)。
  2. format 函数性能问题format 灵活性高但性能低于 convert,大数据量查询(如百万级)优先用 convert
  3. null 日期处理:转换前先用 isnull 处理 null,避免结果为 null:
select isnull(convert(varchar(10), createtime, 23), '未填写') as 日期
from users;

总结

  1. 兼容性优先:用 convert(字段, 格式代码)(如 23=yyyy-mm-dd、112=yyyymmdd),适配所有 sql server 版本;
  2. 灵活性优先:sql server 2012+ 用 format(字段, '自定义格式', 'zh-cn'),支持中文 / 自定义格式;
  3. 核心场景
    • 分表名 / 文件名:用 convert(..., 112) 生成纯数字日期;
    • 前端展示:用 format 生成中文 / 自定义格式;
    • 日期筛选:直接比较日期类型,避免转换为字符串;
  4. 避坑:避免全局修改日期格式,优先局部转换;大数据量场景慎用 format

以上就是sql server中设置日期显示格式的四种方法的详细内容,更多关于sql server设置日期显示格式的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com