2013-04-16 81 views
1

为int我想要的值创建选择查询如何转换为varchar通过投

2to5experience 

3to7experience 

转换为 Minexperience:

2 
3 

Maxexperience

5 
7 

所以我创建以下查询,

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 

它显示错误

任何想法

“的VARCHAR值 ')' 转换为数据类型int时转换失败”?

回答

2

在您选择的倒数第二行中,您将表达式转换为int,然后添加(使用+)a )。由于+左侧的值是一个整数,因此SQL Server会尝试将操作数也转换为+的右侧。

尝试改变强制转换为int,这样你,而不是将其转换为varchar

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 

注:

Experiencevarchar演员阵容可能是多余的。

+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