Sql 将自由文本日期值转换为日期数据类型导致转换日期中的未来年份

Sql 将自由文本日期值转换为日期数据类型导致转换日期中的未来年份,sql,sql-server-2008-r2,Sql,Sql Server 2008 R2,我面临将freetext DOB出生日期值转换为有效日期数据类型的问题。我正在使用SQLServer2008R2 下面是一个例子 当通过SQL的convert函数转换自由文本日期值01/28/48时,它将2048显示为年份,而不是1948年,1948年是未来的年份,并且不可能出现在该出生日期列中 有人能帮我摆脱这个问题吗 以下是我附上的屏幕截图,供您快速参考 摘自: 默认情况下,SQL Server根据截止日期解释两位数的年份 2049年。也就是说,两位数的年份49被解释为2049年 两位数的年

我面临将freetext DOB出生日期值转换为有效日期数据类型的问题。我正在使用SQLServer2008R2

下面是一个例子

当通过SQL的convert函数转换自由文本日期值01/28/48时,它将2048显示为年份,而不是1948年,1948年是未来的年份,并且不可能出现在该出生日期列中

有人能帮我摆脱这个问题吗

以下是我附上的屏幕截图,供您快速参考

摘自:

默认情况下,SQL Server根据截止日期解释两位数的年份 2049年。也就是说,两位数的年份49被解释为2049年 两位数的年份50被解释为1950年。许多客户 应用程序(例如基于自动化对象的应用程序)使用截止线 2030年。SQL Server提供了两位数的年份截止值 更改SQL Server使用的截止年份的配置选项 并允许对日期进行一致的处理。我们推荐 指定四位数的年份

您可以通过执行以下操作重新配置:

EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE ;
GO
EXEC sp_configure 'two digit year cutoff', 2030 ;
GO
RECONFIGURE;
GO
有关更多信息,请参阅以下文档:

就我个人而言,我不会重新配置服务器。请确保您的数据有4位数的年份,或者如果您确实需要它们是2位数,因为这些都是出生日期,如果日期是在未来,请删除100年:

DECLARE @dob DATE
SET @dob = CONVERT(DATE, '01/28/48')
IF @dob > GETDATE()
BEGIN
   SET @dob = DATEADD(yy, -100, @dob)
END
摘自:

默认情况下,SQL Server根据截止日期解释两位数的年份 2049年。也就是说,两位数的年份49被解释为2049年 两位数的年份50被解释为1950年。许多客户 应用程序(例如基于自动化对象的应用程序)使用截止线 2030年。SQL Server提供了两位数的年份截止值 更改SQL Server使用的截止年份的配置选项 并允许对日期进行一致的处理。我们推荐 指定四位数的年份

您可以通过执行以下操作重新配置:

EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE ;
GO
EXEC sp_configure 'two digit year cutoff', 2030 ;
GO
RECONFIGURE;
GO
有关更多信息,请参阅以下文档:

就我个人而言,我不会重新配置服务器。请确保您的数据有4位数的年份,或者如果您确实需要它们是2位数,因为这些都是出生日期,如果日期是在未来,请删除100年:

DECLARE @dob DATE
SET @dob = CONVERT(DATE, '01/28/48')
IF @dob > GETDATE()
BEGIN
   SET @dob = DATEADD(yy, -100, @dob)
END

这是SQL Server中的系统范围设置-两位数的年份截止值

检查它对您来说是什么,如下所示:

sp_configure 'show advanced options', 1
reconfigure

sp_configure 'two digit year cutoff'
在我的例子中,我得到的值是2049——任何比这早一年的日期都被认为是20xx年,例如48->2048,比这晚一年的日期被解释为19xx 70->1970

因此,您可以为自己更改此设置,或者您需要编写一个自定义T-SQL函数来处理这种情况—始终将日期转换为19xx日期—无论系统截止日期如何


有关此主题的详细信息,请参见

这是SQL Server中的系统范围设置-两位数的年份截止日期

检查它对您来说是什么,如下所示:

sp_configure 'show advanced options', 1
reconfigure

sp_configure 'two digit year cutoff'
在我的例子中,我得到的值是2049——任何比这早一年的日期都被认为是20xx年,例如48->2048,比这晚一年的日期被解释为19xx 70->1970

因此,您可以为自己更改此设置,或者您需要编写一个自定义T-SQL函数来处理这种情况—始终将日期转换为19xx日期—无论系统截止日期如何


有关此主题的更多信息,请参见

关于2010年1月28日的内容-您如何知道应将其视为1910年还是2010年?为缺乏信息道歉。此自由文本字段是出生日期。如果我们将考虑您的日期01 / 28/10,并保持出生年份的日期为1910。这将是罕见的情况。但这里我们只关心未来的日期。这意味着我不想要未来的约会。我要转换的日期小于今天的日期。也许这会有帮助,那么2010年1月28日呢?你怎么知道这应该被视为1910年还是2010年?为缺乏信息道歉。此自由文本字段是出生日期。如果我们将考虑您的日期01 / 28/10,并保持出生年份的日期为1910。这将是罕见的情况。但这里我们只关心未来的日期。这意味着我不想要未来的约会。我要转换的日期小于今天的日期。也许这会有帮助