SQL Server里convert函数怎么用来格式化时间那点事儿和代码示例分享
- 问答
- 2026-01-09 07:55:27
- 4
在SQL Server里,处理日期和时间显示格式时,CONVERT函数是一个非常常用的工具,它不像一些编程语言里有非常灵活的格式化字符串,SQL Server用的是预先定义好的一些“风格代码”来指定输出格式,这个知识点主要就是记住这些代码和它们对应的样子。
CONVERT函数的基本用法
CONVERT函数的基本语法是这样的:
CONVERT(data_type, expression [, style])
data_type: 你想转换成的数据类型,对于格式化时间,这里通常填VARCHAR或NVARCHAR,因为目的是为了变成字符串显示。expression: 要转换的值,这里就是你的日期时间字段或者变量,GETDATE()。style: 这是最关键的部分,一个整数代码,决定了转换后的字符串格式,这个参数是可选的,如果不写,CONVERT会尝试进行默认的转换。
常用的风格代码和示例
下面我们直接用 GETDATE() 函数(它返回当前系统日期和时间)来演示最常见的几种样式,假设当前时间是“2023年10月27日下午3点09分08秒”。
-
最普通的格式(style 0-9, 100-109) 这一组样式主要区别在于年月日的顺序、分隔符和是否包含世纪。
-
Style 101: 美国标准,月/日/年,这是很清晰的一种格式。SELECT CONVERT(VARCHAR, GETDATE(), 101) AS ‘格式化时间’结果会是:10/27/2023
-
Style 102: ANSI标准,年.月.日,这种格式排序起来很方便。SELECT CONVERT(VARCHAR, GETDATE(), 102) AS ‘格式化时间’结果会是:10.27 -
Style 103: 英国/法国标准,日/月/年。SELECT CONVERT(VARCHAR, GETDATE(), 103) AS ‘格式化时间’结果会是:27/10/2023 -
Style 120: ODBC规范格式,非常标准,长得像YYYY-MM-DD HH:MI:SS,这在和其他系统对接时常用。SELECT CONVERT(VARCHAR, GETDATE(), 120) AS ‘格式化时间’结果会是:2023-10-27 15:09:08 -
Style 121: ODBC规范格式(带毫秒),是120的扩展。SELECT CONVERT(VARCHAR, GETDATE(), 121) AS ‘格式化时间’结果会是:2023-10-27 15:09:08.123(这里的毫秒数是随机的)
你会发现,100以下的代码(如1,2,3…)对应的是两位数的年份(YY),而100以上的代码(如101,102,103…)对应的是四位数的年份(YYYY),所以现在基本都用100以上的代码,避免千年虫问题。

-
-
只获取日期部分(不包含时间) 有时候你只关心日期,不想要后面的时间,虽然可以用
Style 101或102,但更精确的方法是使用Style 112。Style 112: ISO标准,纯数字格式YYYYMMDD,这不仅是显示格式,也是排序和比较的理想格式。SELECT CONVERT(VARCHAR, GETDATE(), 112) AS ‘纯日期’结果会是:20231027
如果你想得到带分隔符的纯日期,比如
2023-10-27,用Style 23也可以。SELECT CONVERT(VARCHAR, GETDATE(), 23) AS ‘纯日期’结果会是:2023-10-27 -
只获取时间部分(不包含日期) 同样,有时候只需要时间。
-
Style 108: 标准时间格式HH:MI:SS。SELECT CONVERT(VARCHAR, GETDATE(), 108) AS ‘纯时间’结果会是:15:09:08 -
Style 114: 带毫秒的时间格式。SELECT CONVERT(VARCHAR, GETDATE(), 114) AS ‘纯时间带毫秒’结果会是:15:09:08.123
-
-
中文环境下常用的格式 我们中国人习惯说“年月日”。
-
Style 111: 格式是YYYY/MM/DD,虽然不是纯中文,但读起来很符合习惯。SELECT CONVERT(VARCHAR, GETDATE(), 111) AS ‘格式化时间’结果会是:2023/10/27 -
如果想得到
YYYY年MM月DD日这种格式,CONVERT函数的内置样式是做不到的,这就需要更强大的FORMAT函数(SQL Server 2012及以上版本支持)了,不过我们今天主要讲CONVERT。
-
一个实用的查询:查看所有样式
你可以运行下面这个简单的查询,一次性看到同一个时间点用不同样式转换出来的所有结果,这对于学习和查找需要的格式非常方便。
DECLARE @Now DATETIME = GETDATE()
SELECT
style_id = 100,
style_format = ‘默认’,
result = CONVERT(VARCHAR, @Now, 100)
UNION ALL
SELECT 101, ‘美国 mm/dd/yyyy’, CONVERT(VARCHAR, @Now, 101)
UNION ALL
SELECT 102, ‘ANSI yy.mm.dd’, CONVERT(VARCHAR, @Now, 102)
UNION ALL
SELECT 103, ‘英法 dd/mm/yyyy’, CONVERT(VARCHAR, @Now, 103)
UNION ALL
SELECT 108, ‘时间 hh:mi:ss’, CONVERT(VARCHAR, @Now, 108)
UNION ALL
SELECT 111, ‘日本 yyyy/mm/dd’, CONVERT(VARCHAR, @Now, 111)
UNION ALL
SELECT 112, ‘ISO yyyymmdd’, CONVERT(VARCHAR, @Now, 112)
UNION ALL
SELECT 120, ‘ODBC yyyy-mm-dd hh:mi:ss’, CONVERT(VARCHAR, @Now, 120)
UNION ALL
SELECT 121, ‘ODBC(含毫秒)’, CONVERT(VARCHAR, @Now, 121)
ORDER BY style_id
总结一下
CONVERT函数格式化时间的关键就是背下那些常用的“风格代码”,它用起来简单直接,性能也很好,对于大多数“年月日时分秒”的常规显示需求,CONVERT都能胜任,它的缺点是不够灵活,格式是固定的,如果你需要像“2023年10月27日”这样非常特定的格式,那就得求助更新的FORMAT函数了,但FORMAT的性能开销比CONVERT大很多,在处理大量数据时要谨慎使用。
掌握好CONVERT函数的这些样式代码,是高效使用SQL Server进行日期显示处理的基本功,希望这些直接的例子对你有帮助。
本文由凤伟才于2026-01-09发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/77318.html
