2015-08-24 2 views
0

Мне нужно извлечь часть строки столбца в столбце. Например: у меня есть таблица «Сотрудник» и вы хотите отобразить фактическое сообщение об ошибке в столбце «Ошибка».Показать подстроку в sql-сервере 2012

enter image description here

Обязательно:

enter image description here

Пожалуйста, помогите мне. Спасибо заранее за все ответы.

+0

SUBSTRING ('abcdef', 2, 3); – Lijo

ответ

0

вы должны сделать одну общую функцию, чтобы лишить теги ошибок,

CREATE FUNCTION [dbo].[udf_StripHTML] (@HTMLText VARCHAR(MAX)) 
RETURNS VARCHAR(MAX) AS 
BEGIN 
    DECLARE @Start INT 
    DECLARE @End INT 
    DECLARE @Length INT 
    SET @Start = CHARINDEX('<',@HTMLText) 
    SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText)) 
    SET @Length = (@End - @Start) + 1 
    WHILE @Start > 0 AND @End > 0 AND @Length > 0 
    BEGIN 
     SET @HTMLText = STUFF(@HTMLText,@Start,@Length,'') 
     SET @Start = CHARINDEX('<',@HTMLText) 
     SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText)) 
     SET @Length = (@End - @Start) + 1 
    END 
    RETURN LTRIM(RTRIM(@HTMLText)) 
END 

Делая эту функцию, называют как этот

выберите DBO. [Udf_StripHTML] ('ваша строка с тегами')

+0

Rajesh, значения столбца недействительны html-тегами. – curiousboy

+0

@ curiousboy - я знаю, но он удалит любой тег, который имеет символ «<" and ">». Кроме того, я попытался использовать данные столбца, и он работает нормально. он дает в соответствии с вашим требуемым результатом. попробуйте чувак ... – pedram

+0

Ouch скалярная функция с циклом while. Это будет работать, но производительность будет довольно медленной. –

1

Если вы просто 1 «Error» в вашей ошибки тег и столбец cotains правильный XML, то вы можете попробовать это:

select ID, [Name], Cast([Error] AS XML).value('(/errors/Error)[1]', 'nvarchar(max)') AS Error 
FROM t 

Здесь вы найдете маленький fiddle.

+0

Tjasun, столбец не содержит действительного тега xml. вы можете рассматривать значение как строку. – curiousboy

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