sql server里时间格式转换成字符串那些事儿,简单聊聊怎么弄比较方便
- 问答
- 2026-01-26 10:43:39
- 47
关于SQL Server里把时间转换成字符串这事儿,其实日常用得挺多的,比如你想把数据库里的日期时间,变成某种特定格式的文本显示在报表里,或者拼接成一段文件名,都得用到这个转换,下面我就简单聊聊几种常见也方便的做法,主要就是两个函数:CONVERT 和 FORMAT。
最传统、也最常用的方法是用 CONVERT 函数,这个函数是 SQL Server 内置的,速度通常比较快,它的用法是 CONVERT(目标数据类型, 要转换的日期, 样式代码),这里的关键是那个“样式代码”,它是一个数字,代表了你想要输出成什么样子。
比如说,你有一个 GETDATE() 出来的日期时间,想变成常见的 ‘YYYY-MM-DD’ 格式,你可以用样式代码 23:SELECT CONVERT(VARCHAR(10), GETDATE(), 23),如果想要美式的 ‘MM/DD/YYYY’ 格式,那就用代码 101:SELECT CONVERT(VARCHAR(10), GETDATE(), 101),想要带完整时间的,‘YYYY-MM-DD HH:MI:SS’,样式代码 120 就很好用:SELECT CONVERT(VARCHAR(19), GETDATE(), 120),这些代码有很多,微软的官方文档里有一个完整的列表,需要的时候查一下就行,它的好处是效率高,特别是处理大量数据时,缺点就是得记一些代码,或者常备一份代码表在手边。

另一种更直观、更灵活的方法是 SQL Server 2012 版本开始提供的 FORMAT 函数,这个函数用起来就有点像在C#里格式化字符串,对你想要的样子一目了然,它的语法是 FORMAT(要转换的值, 格式字符串, 可选区域设置)。
你可以用一些特定的“格式说明符”来拼出你想要的格式。SELECT FORMAT(GETDATE(), 'yyyy-MM-dd') 就直接得到 ‘2023-10-27’,想要中文的‘年月日’格式?也很简单:SELECT FORMAT(GETDATE(), 'yyyy年MM月dd日'),甚至可以把时间部分也精细地控制起来:SELECT FORMAT(GETDATE(), 'HH:mm:ss') 就只输出时间部分,这个函数最大的优点就是灵活、好读,你几乎可以像拼写单词一样组合出任何格式,不需要死记硬背数字代码,根据微软的文档说明,它提供了对格式的全面控制。

方便是有代价的。FORMAT 函数通常比 CONVERT 要慢一些,因为它底层调用了.NET Framework的库,功能更强大但也更重,如果你只是做一次性的查询,或者对性能要求不那么苛刻,用 FORMAT 写起来很舒服;但如果你是在一个要处理几百万行数据的循环或报表里,可能就得考虑用 CONVERT 来保证速度了。
除了这两个主力,有时候也会用到一些“组合拳”,比如用 DATEPART 函数分别取出年、月、日,然后再用字符串连接符 拼起来,或者用 LEFT、RIGHT 这样的字符串函数来截取,但这些方法通常比较啰嗦,不如上面两个函数直接。
怎么弄比较方便呢?
- 图快、处理大数据量时,首选 CONVERT 函数,把常用的几个样式代码(比如23, 120, 112, 101)基本就够用了。
- 图方便、图格式灵活好记时,就用 FORMAT 函数,特别是格式比较复杂,或者需要本地化显示(比如中文年月日)的时候,用它写起来非常直观。
- 根据微软的建议,在考虑性能的场合要留意两者差异,对于简单的、标准的格式转换,CONVERT是经过优化的选择。
最后提个小醒,转换的时候要注意你声明的字符串长度够不够,别把转换后的长字符串截断了,存储时尽量用原生的日期时间类型(如 DATETIME, DATE),只在最终展示给用户看的时候再转换成字符串,这样有利于计算和比较。
本文由雪和泽于2026-01-26发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://lrxt.haoid.cn/wenda/86152.html
