首页 > 解决方案 > CONVERT 显示错误的年份

问题描述

我正在使用 SQL Server 2014,我正在尝试执行数据转换,传递的值是 '04-SEP-44'

因为这是出生年份,所以必须是 1944 年,而不是 2044 年。

我试过了

select convert(DATETIME, '04-SEP-44')
select convert(DATETIME, '04-SEP-44', 1)
select convert(DATETIME, '04-SEP-44', 13)

但他们都使用年份为2044

是否有任何快速解决此问题的方法?

标签: sqlsql-servertsql

解决方案


可能性:

  • 如果该值大于今天减去 100 年...
  • 强制“19”进入字符串......

但这真的取决于您的业务规则,它总是会是 1900 年,还是某些日期可能是 2000 年初?你真的应该更新你的前端来捕捉完整的日期。

select case when Y.[Value] > getdate() then dateadd(year, -100, Y.[Value]) else Y.[Value] end
  , convert(date, substring(X.[Value], 1, 7) + '19' + substring(X.[Value], 8, 2))
from (values ('04-SEP-44')) as X ([Value])
cross apply (values (convert(date, X.[Value]))) as Y ([Value]);

注意:为什么要将 a 转换date为 a datetimedatetime如果您没有时间组件,请不要使用 a 。


推荐阅读