SQL Server 2014导出datetime为yyyy-mm-ddTHH:MM:SS格式的方法
解决SQL Server 2014导出datetime为ISO 8601格式的问题
首先解释一下你看到的T:它是ISO 8601标准日期时间格式里的分隔符,用来明确区分日期部分(yyyy-MM-dd)和时间部分(HH:mm:ss),这种格式是跨系统交互(比如API、JSON数据交换)非常常用的标准格式,很多工具和服务都会默认识别它。
回到你的问题:SQL Server里没有直接输出这种格式的原生datetime类型——因为datetime是存储用的数据类型,它的显示格式是可以通过转换控制的,所以你确实需要把datetime字段转换成字符串类型(varchar/nvarchar)来生成目标格式。这里有两种实用的方法:
方法1:用CONVERT函数(性能优先)
SQL Server的CONVERT函数支持指定格式代码,其中格式126刚好对应ISO 8601的标准格式,直接就能生成带T的字符串:
-- 生成带毫秒的格式:yyyy-MM-ddTHH:mm:ss.mmm SELECT CONVERT(VARCHAR(23), [Jobf_DteLog], 126) AS DateLogged FROM [tblJobs]; -- 如果不需要毫秒,用LEFT截取前19位即可: SELECT LEFT(CONVERT(VARCHAR(23), [Jobf_DteLog], 126), 19) AS DateLogged FROM [tblJobs];
这个方法的优势是性能很高,适合处理大数据量的导出场景,因为CONVERT是SQL Server原生的高效转换函数。
方法2:用FORMAT函数(可读性优先)
从SQL Server 2012开始支持的FORMAT函数更直观,你可以直接写目标格式的字符串,不需要记格式代码:
SELECT FORMAT([Jobf_DteLog], 'yyyy-MM-ddTHH:mm:ss') AS DateLogged FROM [tblJobs];
这个方法的好处是代码更容易理解,如果你需要调整格式(比如加上时区信息)也更灵活,但缺点是性能比CONVERT稍差,适合数据量不大的导出场景。
你可以根据自己的导出数据量和需求来选择对应的方法,两种都能生成你需要的2019-08-15T08:30:00格式。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

