2013-04-16 6 views
1

В моей таблице, у меня есть поля Опыт, какразбить строку в SQL Server 2008

Опыт

  • 0to0Years
  • 2to0Years
  • 7to12Years

Здесь я хочу Разделить на

  • Yearfrom - 0
  • Yearto- 0

Как разделить строки здесь. Я ищу столько статей. Я не могу найти правильное решение. Есть ли способ сделать здесь?

+0

, что сохранить его в БД или просто Disply? – Freelancer

+0

Я хочу использовать select statement now. так что это просто средство отображения ok.then я исполняю другую таблицу. – Duk

+1

хорошо, подождите некоторое время. – Freelancer

ответ

3

Вот рабочий раствор,

declare @yearfrom varchar(2),@yearto varchar(2) 

select @yearfrom=substring('0to0Years',0,patindex('%to%','0to0Years')), 
@yearto=substring('0to0Years',patindex('%to%','0to0Years')+2,patindex('%Years%','0to0Years')-patindex('%to%','0to0Years')-2) 

SqlFiddle: http://www.sqlfiddle.com/#!3/d41d8/12483

Для работы на вашей колонке заменить '0to0Years' с именем столбца

declare @yearfrom varchar(2),@yearto varchar(2) 

     select @yearfrom=substring(col_name,0,patindex('%to%',col_name)), 
     @yearto=substring(,patindex('%to%',col_name)+2,patindex('%Years%',col_name)-patindex('%to%',col_name)-2) 
from table_name where <condition> 
+2

хороший один чувак. – Freelancer

+0

gee..thanks man –

+0

Это хорошо. Но у меня есть некоторые проблемы, когда я использую select insert query like, select top (5) 'insert jobs() values ​​(' + substring (Опыт, 0, patindex ('% to%', Experience)) * 365 * 24 * 60 * 60, подстрока (опыт, patindex ('% to%', Experience) + 2, patindex ('% Years%', Experience) -patindex ('% to%', Experience) -2) + ')' from requirementsdetailsfororganization и получение ошибки «Ошибка конверсии при преобразовании значений вставки varchar value() в значения типа int.» – Duk

0

Попробуйте это с помощью Parsename функции

Select parsename(replace(Experience,'to','.'),2) , 
     substring(parsename(replace(Experience,'to','.'),1),0, 
     charindex('Y',parsename(replace(Experience,'to','.'),1))) 
from YourTable 

Demo в SQLFiddle

+0

У вас есть одна проблема? Когда этот запрос выполняется, результат для oto12years, поэтому он даст 0 12y. Если я удалю это место, значит проблема в 0to0years. «0» не подходит. – Duk

+0

Я обновил свой ответ – praveen

0

Попробовать следующие шаги ...

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

          -- Insert Values : 
          Insert into #Table Values('Tom','0to0Years') 
          Insert into #Table Values('Victor','0to1Years') 
          Insert into #Table Values('Mark','11to12Years') 
          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,'Years','')) - (CharIndex('to',Experience)+1)) as YearTo 
          from #Table 
0

Пожалуйста, попробуйте:

select 'YearFrom - '+substring(Data, 0, PatIndex('%[to]%', Data)) YearFrom, 
    'YearTo - '+replace(stuff(Data, 1, PatIndex('%[to]%', Data)+1, ''), 'Years', '') YearTo 
from 
(
    Select '0to0Years' Data union 
    Select '2to0Years' Data union 
    Select '756to12Years' Data 
)x 
Смежные вопросы