2017-02-28 99 views
-1

我在SQL Server中存储了出生日期的问题。出生日期在SQL Server 2014中存储为未来日期

当我转换为日期函数时,DOB 04/14/48存储为2048-04-14(所需值为1948-04-14)。根据我阅读的文章,我将日期的两位数字从2049的默认值更改为2030.现在我可以将其保存为1948-04-14。但06/13/20的出生日期仍保存为2020-06-13(实际值为1920-06-13)。

我不知道应该如何设置两位数截止日期来解决所有这些问题。我正在使用SQL Server 2014.我正在从平面文件加载数据,并且日期始终以平面文件中的mm/dd/yy格式显示。

+0

什么是'04/14/16'应该是什么?为什么你不能存储整年? – Lamak

+0

您只需在插入/更新语句中检查日期。如果是将来,则从中减去100年。 –

+0

@Lamak我的实际需求是这样的,如果DOB的年份部分>当年,则从年减去100,否则将其转换为yyyy-mm-dd格式。我的数据库中有很多日期字段,所以我只能将它应用于SQL表中的DOB字段。 – Please

回答

1

如何进行转换,然后根据需要减去一个世纪?

select (case when convert(date, dob, ??) > getdate() 
      then dateadd(year, -100, convert(date, dob, ??)) 
      else convert(date, dob, ??) 
     end) 

如果您没有任何百岁老人,您甚至可以在数据中添加此项作为计算列。

+0

谢谢!我试过这个选项。它工作正常。由于我的SQL表中有很多日期字段,因此我需要单独添加此代码。有什么方法可以在数据库级别设置,以便我不需要更新所有日期字段? – Please

+0

@请。 。 。你需要更新所有的日期字段。你可以使用一些内置的sps,比如'sp_MSforeachtable'。 –

相关问题