2013-04-16 2 views
1

캐스팅 사용하여 int로 VARCHAR로 변환하는 방법을 선택 쿼리 만들기 다음 쿼리,내가 Minexperience에 값</p> <pre><code>2to5experience 3to7experience </code></pre> <p>을 변환 할

select cast(substring(Cast(Experience AS VARCHAR(50)),1,1)*365*24*60*60 as int) as Experience 
     from requirementsdetailsfororganization 

위의 방법이 효과적입니다. 다음과 같이 쿼리를 업데이트하면 오류가 발생합니다.

select 'Insert into Jobs(requirementId,organizationId,Minexperience)values(' + 
    Cast(o.RequirementID as varchar(50))+',' + 
    Cast(o.OrganizationID as varchar(50))+',' + 
    cast(substring(CAST(Experience AS VARCHAR(50)),1,1)*365*24*60*60 as int)+')' 
    FROM RequirementsDetailsforOrganization AS o 

그것은 보여줍니다

어떤 생각

"int 데이터 형식에 VARCHAR 값 ')을'변환 할 때 변환 실패"오류?

답변

2

마지막 두 번째 행에서 표현식을 int으로 캐스팅 한 다음 을 사용하여 )을 추가합니다. + 왼쪽의 값은 정수이므로 SQL Server는 피연산자를 + 오른쪽의 정수로 변환하려고 시도합니다. 대신 varchar에 캐스팅 너무 int에 캐스트를 변경

시도 :

select 'Insert into Jobs(requirementId,organizationId,Minexperience)values(' + 
    Cast(o.RequirementID as varchar(50))+',' + 
    Cast(o.OrganizationID as varchar(50))+',' + 
    cast(substring(CAST(Experience AS VARCHAR(50)),1,1)*365*24*60*60 as varchar(50))+')' 
    FROM RequirementsDetailsforOrganization AS o 

참고 :

varchar-Experience의 캐스팅은 아마 불필요.

+0

문제가 있습니다. 내가 2to17years를 선택하려 할 때 2 17y와 같이 걸린다는 것을 의미합니다. 그걸 어떻게 바로 잡을 수 있니? – PoliDev

+0

@AngDei Marimuthu의 대답을 참조하십시오! –

1

다음 단계를 시도하십시오.

--Create Table : 
Create Table #Table 
(
Name Varchar(50), 
Experience Varchar(20) 
) 
Go 

-- Insert Values : 
Insert into #Table Values('Tom','0to0experience') 
Insert into #Table Values('Victor','0to1experience') 
Insert into #Table Values('Mark','11to12experience') 
Go 

--View Data 
Select * from #Table 

--Using CharIndex and Substring : 
Select Name, 
Substring(Experience,1,CharIndex('to',Experience)-1) as Yearfrom, 
Substring(Experience,(CharIndex('to',Experience)+2),Len(Replace(Experience,'experience','')) - (CharIndex('to',Experience)+1)) as YearTo 
from #Table 

--Clean Up: 
Drop Table #Table 
관련 문제