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

在SQL Server中如何提取字符型回历日期的年份?

解决SQL Server中回历日期字符串转换的报错问题

你遇到的问题核心是SQL Server没法直接识别你存储的回历(Hijri)日期字符串格式,导致DATEPART函数无法正常处理。咱们一步步来解决这个问题:

错误原因

你的EndDateHejri字段是字符串类型,格式为dd/mm/yyyy(比如19/07/1440)。当你直接把这个字符串传给DATEPART时,SQL Server会尝试用默认的日期规则解析它,但默认规则不支持回历日期的解析,所以抛出了"Conversion failed when converting date and/or time from character string"的转换错误。

解决方案

我们需要先把字符串转换成SQL Server能识别的回历日期类型,再提取年份。这里可以用TRY_CONVERT函数(比CONVERT更安全,遇到无效日期会返回NULL而不是直接报错),并指定样式131——这个样式专门对应dd/mm/yyyy格式的回历日期。

基础查询示例

SELECT TOP 200 
    DATEPART(YEAR, TRY_CONVERT(date, EndDateHejri, 131)) AS HijriYear
FROM student

可选:过滤无效日期

如果你的数据里存在格式不正确的日期字符串,可以加个WHERE子句只保留有效转换的记录:

SELECT TOP 200 
    EndDateHejri,
    DATEPART(YEAR, TRY_CONVERT(date, EndDateHejri, 131)) AS HijriYear
FROM student
WHERE TRY_CONVERT(date, EndDateHejri, 131) IS NOT NULL

补充说明

  • 样式131是SQL Server针对dd/mm/yyyy格式回历日期的专用解析参数,完全匹配你给出的日期格式;如果你的日期字符串是yyyy/mm/dd格式,需要改用样式130。
  • 尽量避免长期把日期存为字符串类型,后续可以考虑把字段类型改成date,提前用上述转换逻辑完成数据迁移,这样后续查询会更高效也更少出错。

内容的提问来源于stack exchange,提问作者syed mohsin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:46:28