2015-07-28 2 views
0

с использованием SQL 2008; У меня есть следующая строка:разделительная строка с символом

EMCo: 1 WorkOrder: 12770  WOItem: 10 

Я пытаюсь получить WorkOrder #.

Когда в строке не было WOItem, я смог использовать следующий оператор, чтобы получить WorkOrder #.

[WorkOrder] = LTRIM(RTRIM(RIGHT(HQMA.KeyString,CHARINDEX(':',REVERSE(HQMA.KeyString))-1))) 

Это заявление движется и может иметь двойные цифры для Co #, и это не всегда WOItem #. Хотел найти что-то, что разделилось бы после «:» и просто заняло 2-ю группу.

Любые предложения?

ответ

0

PATINDEX предложение выше будет работать красиво, теперь, если вы все еще хотите использовать текущее заявление, подстрока будет тянуть то же значение, и заменить вынет WOItem. Не очень элегантный, он работает ли у вас WOItem или нет:

select substring(LTRIM(RTRIM(RIGHT(REPLACE(HQMA.KeyString,'WOItem:',''), 
CHARINDEX(':',REVERSE(REPLACE(HQMA.KeyString,'WOItem:','')))-1))),0,7) 


select substring(LTRIM(RTRIM(RIGHT(REPLACE(HQMA.KeyString,'WOItem:',''), 
CHARINDEX(':',REVERSE(REPLACE(HQMA.KeyString,'WOItem:','')))-1))),0,7) 
+0

Это сделало, спасибо !! – Kerry

0

Как насчет использования patindex()? Предполагая, что порядок работы всегда имеет пять символов:

select substring(HQMA.KeyString, 
       patindex('%WorkOrder: %', HQMA.KeyString) + 11, 
       5) as WorkOrder 
+0

У меня есть несколько заказов на выполнение работ, которые являются 4-х символов – Kerry

+0

@Kerry. , , Это также должно работать и для тех, кто обрезает пробелы из результатов. –

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