【发布时间】:2019-12-14 01:47:36
【问题描述】:
如果我在 SQL Server 中执行以下查询,一切都很好:
SELECT convert(datetime, '580112', 12)
1958-01-12 00:00:00.000
但是当我执行这个查询时:
SELECT TOP 1 [ID]
,[FirstName]
,[MiddleName]
,[LastName]
,CONVERT(datetime, [DateOfBirth], 12)
,[address]
,[city]
,[state]
,[zip]
,[phoneNumber]
FROM [dbo].[PF]
GO
我收到以下错误:
Msg 242, Level 16, State 3, Line 7
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
我的数据是这样的:
ID FirstName MiddleName LastName DateOfBirth address city state zip phonenumber
1 100 MARGARET P BIGGIO 580112 122 WALTHAM ST MAYNARD MA 01754 9788971581
编辑:
其他日期同为 yymmdd ISO 格式:
DateOfBirth
531000
481023
500700
500200
570518
411100
580112
510100
840800
671200
680605
681216
430600
470701
470330
630206
470600
710914
620800
590100
DateOfBirth 是 VARCHAR,我必须将其转换为其他内容吗?
【问题讨论】:
-
您是否尝试过将其转换为日期时间,例如:
CONVERT(datetime, cast([DateOfBirth] as datetime), 12) -
如果您运行选择查询,但添加“WHERE ID = 1”...会返回一个结果,还是抛出相同的错误?
-
如果您使用的是 SQL Server 2016 或更高版本,请尝试使用
TRY_CONVERT()函数来定位您的不良数据。 -
另外,请注意 SQL Server 的两位数年份行为:“默认情况下,SQL Server 根据截止年份 2049 解释两位数年份。这意味着 SQL Server 解释两位数年份 49如 2049 和两位数的年份 50 作为 1950。许多客户端应用程序,包括基于自动化对象的应用程序,使用截止年份 2030。SQL Server 提供了两位数的年份截止配置选项来更改 SQL Server 使用的截止年份。 " docs.microsoft.com/en-us/sql/t-sql/functions/…
-
控制截止年份的方法如下:docs.microsoft.com/en-us/sql/database-engine/configure-windows/… 但您需要先了解您的数据,然后才能设置截止年份。
标签: sql-server datetime type-conversion