2009-11-05 3 views
0

У меня есть запись строки в следующем формате:Получение строковых данных в SQL

Сайт = [номер]; this = that; foo = bar;

[номер] сверху может быть от 1 ... бесконечность. Поэтому мне нужно разделить [число], чтобы использовать в других предложениях select where where. Site = [number] всегда находится в начале строки, и данные всегда разделяются точкой с запятой.

+2

Является ли эта логика манипуляции строкой в ​​предложении select или в разделе where? Если это происходит в предложении where, я бы подумал о реорганизации схемы базы данных, потому что вы вряд ли получите хорошую производительность. – Asaph

ответ

1
SELECT SUBSTRING(col, 1, CHARINDEX(col,';')) 
2
declare @t nvarchar(100) = 'Site=230;this=that;foo=bar;'; 
select convert(int, substring(@t,6, charindex(';',@t,0)-6)) 
1

Почему вы хранения данных в базе данных в этом формате? Разделите его на столбцы, чтобы вы могли делать осмысленные запросы.

+0

+1: эта конкретная проблема должна решаться на более высоком уровне: датамодель. – BalusC

+0

Вот как это сделал продавец. Я сказал им, что это отстой, но я должен разобраться с этим сейчас. – user204265

+0

-1 это не поможет –

0

Вы можете играть со строкой таким образом:

declare @tx as nvarchar(100) 
set @tx = 'Site=[number];this=that;foo=bar;' 

print substring(
    @tx, 
    CHARINDEX('[', @tx)+1, 
    CHARINDEX(']',@tx)-CHARINDEX('[',@tx)-1) 

Надеется, что это помогает.

0

У меня нет MS SQL Server доступной, чтобы попробовать это, но вы пробовали что-то вроде

Выбери поля новообращенных (BIGINT, подстрока (поле, 6)), как thenum из таблицы, с где условие = что-то

где поле имя поля, содержащего сайт = [число]; ...

теория гласит, что подстрока будет сдирать сайт = от начала , и конвертировать будет (надеюсь) конвертировать числовую часть и игнорировать остальную часть текста с точки с запятой и далее.

Это может быть или не работать. Если нет, вам может понадобиться написать сложную функцию.

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