2010-07-28 6 views
0

Я пытаюсь выполнить запрос ниже, но у меня возникла ошибка: «Преобразование типа данных символа в тип данных даты и времени привела к значению даты и времени вне диапазона». Я пытаюсь преобразовать дату и дату, но такая же ошибка выйдет.Ошибка даты SQL Server

select DATEDIFF(YEAR,cast(Startdate as datetime),isnull(cast(Enddate as datetime), GETDATE())) 
from employmentdetails where id=36 

select DATEDIFF(YEAR,CONVERT(varchar,Startdate,101),isnull(CONVERT(varchar,Enddate,101),CONVERT(varchar,GETDATE(),101))) 
from employmentdetails where id=35 


create table EmploymentDetails(
    Id     bigint   not null identity constraint PK_EmploymentDetails primary key, 
    aId     bigint   not null, 
    Startdate   varchar(25), 
    Enddate    varchar(25), 
    Position   varchar(30), 
    PositionLevelId  bigint   not null, 
    SpecializationId bigint   not null, 
    PositionId   bigint   not null, 
    StartSalary   varchar(50), 
    EndSalary   varchar(50), 
    DescriptionofDuties nvarchar(1000), 
    ReasonforLeaving nvarchar(200), 
    CompanyName   nvarchar(100), 
    TypeofBusiness  varchar(50), 
    Address1   varchar(25), 
    Address2   varchar(25), 
    City    varchar(25), 
    Province   varchar(25), 
    StateorRegion  varchar(25), 
    CountryId   bigint, 
    PostalCode   varchar(10) 
) 
go 

INSERT [dbo].[EmploymentDetails] ([Id], [aId], [Startdate], [Enddate], [Position], [PositionLevelId], [SpecializationId], [PositionId], [StartSalary], [EndSalary], [DescriptionofDuties], [ReasonforLeaving], [CompanyName], [TypeofBusiness], [Address1], [Address2], [City], [Province], [StateorRegion], [CountryId], [PostalCode]) 
VALUES (34, 154, N'April 1,2010', N'April 10,2010', N'Sr. .Net Developer', 1, 1, 1, N'P12,000', N'P12,000', N'Design websites for company using Adobe dreamweaver, Flash and other web applications.', N'sample reason for leaving', N'Appsource', N'Information Technology', N'Unit 1401 Robinsons Equit', N'ADB Ave. Corner Poveda Ro', N'Pasig', N'NCR', N'NCR', 177, N'') 

INSERT [dbo].[EmploymentDetails] ([Id], [aId], [Startdate], [Enddate], [Position], [PositionLevelId], [SpecializationId], [PositionId], [StartSalary], [EndSalary], [DescriptionofDuties], [ReasonforLeaving], [CompanyName], [TypeofBusiness], [Address1], [Address2], [City], [Province], [StateorRegion], [CountryId], [PostalCode]) 
VALUES (35, 154, N'April 7,2009', N'April 7,2010', N'Lead Software Developer', 1, 2, 1, N'P12,000', N'P12,000', N'Design websites for company using Adobe dreamweaver, Flash and other web applications.', N'sample reason for leaving', N'Corebuilt Technologies', N'Information Technology', N'24/F 88 Corporate Center', N'Valero St.,', N'Makati', N'NCr', N'NCr', 177, N'') 

INSERT [dbo].[EmploymentDetails] ([Id], [aId], [Startdate], [Enddate], [Position], [PositionLevelId], [SpecializationId], [PositionId], [StartSalary], [EndSalary], [DescriptionofDuties], [ReasonforLeaving], [CompanyName], [TypeofBusiness], [Address1], [Address2], [City], [Province], [StateorRegion], [CountryId], [PostalCode]) 
VALUES (36, 154, N'April 7,2009', N'', N'Web Developer', 1, 1, 1, N'P15,000', N'P15,000', N'sample description', N'sample description', N'IDCSI', N'Information Technology', N'15/F Summit One Tower', N'530 Shaw Blvd.,', N'Mandaluyong', N'', N'NCR', 177, N'') 

INSERT [dbo].[EmploymentDetails] ([Id], [aId], [Startdate], [Enddate], [Position], [PositionLevelId], [SpecializationId], [PositionId], [StartSalary], [EndSalary], [DescriptionofDuties], [ReasonforLeaving], [CompanyName], [TypeofBusiness], [Address1], [Address2], [City], [Province], [StateorRegion], [CountryId], [PostalCode]) 
VALUES (38, 155, N'June 12,2008', N'June 12,2009', N'Analyst', 1, 3, 1, N'P15,000', N'P15,000', N'sample description', N'sample description', N'IDCSI', N'Information Technology', N'15/F Summit One Tower', N'530 Shaw Blvd.,', N'Mandaluyong', NULL, NULL, 177, NULL) 

INSERT [dbo].[EmploymentDetails] ([Id], [aId], [Startdate], [Enddate], [Position], [PositionLevelId], [SpecializationId], [PositionId], [StartSalary], [EndSalary], [DescriptionofDuties], [ReasonforLeaving], [CompanyName], [TypeofBusiness], [Address1], [Address2], [City], [Province], [StateorRegion], [CountryId], [PostalCode]) 
VALUES (40, 156, N'August 1, 2001', N'', N'Quality Controller', 1, 2, 1, N'P15,000', N'P15,000', N'sample description', N'sample description', N'IDCSI', N'Information Technology', N'15/F Summit One Tower', N'530 Shaw Blvd.,', N'Mandaluyong', N'', N'', 177, N'') 

INSERT [dbo].[EmploymentDetails] ([Id], [aId], [Startdate], [Enddate], [Position], [PositionLevelId], [SpecializationId], [PositionId], [StartSalary], [EndSalary], [DescriptionofDuties], [ReasonforLeaving], [CompanyName], [TypeofBusiness], [Address1], [Address2], [City], [Province], [StateorRegion], [CountryId], [PostalCode]) 
VALUES (41, 165, N'January 12, 1980', N'June 8, 1995', N'Analyst', 1, 2, 1, N'P15,000', N'P15,000', N'sample description', N'sample description', N'Microsoft', N'Information Technology', N'15/F Summit One Tower', N'530 Shaw Blvd.,', N'Mandaluyong', NULL, NULL, 177, NULL) 

INSERT [dbo].[EmploymentDetails] ([Id], [aId], [Startdate], [Enddate], [Position], [PositionLevelId], [SpecializationId], [PositionId], [StartSalary], [EndSalary], [DescriptionofDuties], [ReasonforLeaving], [CompanyName], [TypeofBusiness], [Address1], [Address2], [City], [Province], [StateorRegion], [CountryId], [PostalCode]) 
VALUES (42, 165, N'August 2,1995', N'', N'Programmer', 1, 3, 1, N'P15,000', N'P15,000', N'sample description', N'sample description', N'Microsoft', N'Information Technology', N'15/F Summit One Tower', N'530 Shaw Blvd.,', N'Mandaluyong', N'', N'', 177, N'') 
+2

Это поможет узнать основные данные для соответствующих записей. – NotMe

+0

@Chris Lively - я уже обновил вопрос, включая таблицу и данные, спасибо – user335160

+0

Вместо 'cast()', попробуйте использовать 'convert()' с 'type = 107'? – pascal

ответ

1

MS-SQL поддерживает даты от '1753-01-01' до '9999-12-31'. Вы должны предоставить дату (или большое количество в формате varchar, который пытается конвертировать в дату), которая находится за пределами этого диапазона.

1

Вы должны исправить проблему, а не симптом: измените столбцы базы данных на тип данных DATETIME, и вам больше не придется беспокоиться об этом.

1

Вы никогда не должны хранить даты как varchar (25), использовать datetime, smalldatetime, или типы данных даты (дата только в SQL Server 2008) !!!

для строк, где id 36,40 и 42, EndDate не является нулевым, это пустая строка. В результате ваш ISNULL пытается использовать GETDATE(). вот ваш пример запроса, который не сработал с исправлением:

select DATEDIFF(YEAR,cast(Startdate as datetime),isnull(cast(NULLIF(Enddate,'') as datetime), GETDATE())) 
from employmentdetails where id=36