You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL Server中将DateTimeOffset转换为DateTime?附转换示例

嘿,我明白你的需求了——你想把SQL Server里的DateTimeOffset类型转换成DateTime,而且要忽略时区偏移,同时去掉毫秒部分,得到像2018-03-02 12:00:00这样的结果对吧?这里有几个可行的方法,我分情况给你说清楚:

情况1:你需要返回字符串类型(直接得到yyyy-MM-dd HH:mm:ss格式的文本)
  • 方法A:利用LEFT截取字符串
    这是最简单直接的方式,把DateTimeOffset转成字符串后,截取前19个字符(刚好是目标格式的长度):
SELECT LEFT(CONVERT(VARCHAR(30), YourDateTimeOffsetColumn), 19) AS ConvertedDateTime
FROM YourTable

测试你的例子:

SELECT LEFT(CONVERT(VARCHAR(30), '2018-03-02 12:00:00.0000000 -07:00'), 19)

输出就是2018-03-02 12:00:00,完美符合要求,而且不会因为时区转换改变原时间。

  • 方法B:使用FORMAT函数指定格式
    FORMAT函数更灵活,直接指定你想要的日期格式即可,不过注意这个函数仅支持SQL Server 2012及以上版本:
SELECT FORMAT(YourDateTimeOffsetColumn, 'yyyy-MM-dd HH:mm:ss') AS ConvertedDateTime
FROM YourTable

测试例子:

SELECT FORMAT('2018-03-02 12:00:00.0000000 -07:00', 'yyyy-MM-dd HH:mm:ss')

同样能得到2018-03-02 12:00:00。

情况2:你需要返回DateTime类型(而非字符串)

如果最终要的是DateTime类型的值,而不是文本,那可以先截取字符串再转成DateTime:

SELECT CAST(LEFT(CONVERT(VARCHAR(30), YourDateTimeOffsetColumn), 19) AS DATETIME) AS ConvertedDateTime
FROM YourTable

或者用CONVERT一步到位,指定格式代码确保转换准确:

SELECT CONVERT(DATETIME, LEFT(CONVERT(VARCHAR(30), YourDateTimeOffsetColumn), 19), 120) AS ConvertedDateTime
FROM YourTable

测试你的例子的话,返回的DateTime类型值就是2018-03-02 12:00:00。

重要提醒

千万别直接用CAST(YourDateTimeOffsetColumn AS DATETIME)!因为SQL Server会自动把DateTimeOffset的时间转换为当前SQL Server实例所在时区的本地时间,比如你的例子里2018-03-02 12:00:00 -07:00,如果服务器时区是UTC+8,直接CAST会得到2018-03-03 03:00:00,这完全不是你想要的结果。所以一定要用上面的方法来忽略时区偏移,保留原时间部分。

内容的提问来源于stack exchange,提问作者K.Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:21:35