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

如何在SQL Server DateTimeOffset列存储回历日期?转换报错怎解决?

问题原因

直接执行Cast('1444-02-30' as DateTimeOffset)报错,是因为SQL Server默认按**公历(格里高利历)**校验日期,而公历二月最多29天,自然判定这个日期无效。但回历(伊斯兰历)的月份天数和公历不一样,二月确实可能有30天,所以得让SQL Server用回历规则来解析这个字符串。

可行解决办法

DateTimeOffset完全可以存储回历日期,只要用正确的函数指定回历解析规则就行,推荐用PARSE或TRY_PARSE:

  • 如果确定所有遗留日期格式都合法,用PARSE直接转换:
SELECT PARSE('1444-02-30' AS DateTimeOffset USING 'ar-SA')

ar-SA是沙特阿拉伯文化代码,对应回历解析规则。

  • 如果遗留数据里可能有无效日期,用TRY_PARSE避免报错,无效日期会返回NULL:
SELECT TRY_PARSE('1444-02-30' AS DateTimeOffset USING 'ar-SA')
额外提示

如果之后需要把存储的DateTimeOffset转回回历字符串展示,用FORMAT函数指定相同文化代码就行:

SELECT FORMAT(YourDateTimeOffsetColumn, 'yyyy-MM-dd', 'ar-SA') AS HijriDate

内容的提问来源于stack exchange,提问作者Simple Code

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:05:29