2012-04-19 5 views
2

У меня возникла ситуация, когда мне нужно извлечь информацию из строки таблицы sql. Типичная строка выглядит,SQL Logic для извлечения информации

RMR*AZ*10001312**119.76 

где RMR является ключом для идентификации строки. Мне нужно извлечь информацию между вторым и третьим *, т.е. 10001312 и после четвертой т.е. является 119.76

Эта информация будет заполняться в таблице.

Как я мог достичь этого?

+3

** Что ** система баз данных и какая версия? ** SQL ** - это только язык структурированных запросов - язык, используемый многими системами баз данных - SQL - это ** НЕ ** продукт базы данных ... такие вещи, как это очень часто зависят от поставщика, - поэтому нам действительно нужно знать, что используемой системой баз данных. –

+2

Разве вы не должны хранить всю эту информацию в отдельных столбцах вместо одной длинной строки? –

+0

для Microsoft T-SQL – OBL

ответ

1

Пример, сделанный на SQL-сервере, который может вам помочь.

declare @myString varchar(50) 
set @myString = 'sadfa*lkj*234r2*' 

declare @startPosition int 
declare @endPosition int 

--First * location 
select @startPosition = Charindex('*', @myString, 0) 

--Second * location 
select @endPosition = Charindex('*', @myString, @startPosition+1) 
select @endPosition 

select substring(@myString, 
    @startPosition +1 , 
    @endPosition - @startPosition -1) 
0

Ну, вы не сказали, который один из диалектов SQL, вам нужно, так просто общий ответ: использовать строковые операции SQL для, например, смотрите здесь: http://www.1keydata.com/sql/sql-substring.html

1

Учитывая, что нет встроенных функций SQL (что я знаю) для синтаксического анализа строки, как вы хотите, я бы предложил использовать пользовательскую функцию. Затем вы можете разбить строку на * и вытащить нужные вам индексы.

В потоке here имеется обширное обсуждение и множество примеров таких функций.

Смежные вопросы