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

来源:这里教程网 时间:2026-03-31 09:11:09 作者:
一、核心函数:CONVERT(兼容所有版本,推荐)1. 最常用的预定义格式(必记)2. 常用格式代码速查表二、灵活自定义:FORMAT 函数(SQL Server 2012+)1. 常用自定义格式示例2. 自定义格式符速查表三、全局格式设置(影响会话 / 服务器)1. 会话级设置(仅当前连接有效)2. 服务器级设置(需管理员权限)四、实战场景示例场景 1:生成分表名(如 DefectResult2026021)场景 2:查询结果显示中文日期场景 3:按指定格式筛选日期五、避坑点总结

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 位年2026yy2 位年26MM2 位月(补 0)02M1 位月(不补 0)2dd2 位日(补 0)27d1 位日(不补 0)27HH24 小时制(补 0)15hh12 小时制(补 0)03mm分钟(补 0)30ss秒(补 0)45fff毫秒123tt上午 / 下午(12 小时制)下午

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

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

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

-- 设置日期解析/显示的顺序:年-月-日(dmy=日-月-年,mdy=月-日-年) SET DATEFORMAT ymd; -- 设置语言(影响日期的中文/英文显示) SET LANGUAGE Chinese; -- 中文 -- SET LANGUAGE English; -- 英文 -- 验证:默认显示格式会随语言变化 SELECT GETDATE() AS 默认日期格式;

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

通过 SSMS 修改:

    右键服务器 → 「属性」→ 「高级」;找到「默认语言」「日期格式」,修改后重启 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';

五、避坑点

    避免直接比较字符串日期:❌ 错误:WHERE CONVERT(VARCHAR(10), CreateTime, 23) = '2026-02-27'✅ 正确:WHERE CreateTime >= '2026-02-27' AND CreateTime < '2026-02-28'(直接比较日期类型,利用索引)。FORMAT 函数性能问题FORMAT 灵活性高但性能低于 CONVERT,大数据量查询(如百万级)优先用 CONVERTNULL 日期处理:转换前先用 ISNULL 处理 NULL,避免结果为 NULL:

SELECT ISNULL(CONVERT(VARCHAR(10), CreateTime, 23), '未填写') AS 日期 FROM Users;

总结

    兼容性优先:用 CONVERT(字段, 格式代码)(如 23=YYYY-MM-DD、112=YYYYMMDD),适配所有 SQL Server 版本;灵活性优先:SQL Server 2012+ 用 FORMAT(字段, '自定义格式', 'zh-CN'),支持中文 / 自定义格式;核心场景分表名 / 文件名:用 CONVERT(..., 112) 生成纯数字日期;前端展示:用 FORMAT 生成中文 / 自定义格式;日期筛选:直接比较日期类型,避免转换为字符串;避坑:避免全局修改日期格式,优先局部转换;大数据量场景慎用 FORMAT

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

相关推荐

热文推荐