16

Вопрос по sql-server, strpos, sql, syntax – SQL Server: какой-нибудь эквивалент strpos ()?

Я имею дело с раздражающей базой данных, в которой одно поле содержит то, что действительно должно храниться в двух отдельных полях. Таким образом, в столбце хранится что-то вроде «Первая строка ~ @ ~ Вторая строка», где «~ @ ~» это разделитель. (Опять же, я не разработал это, я просто пытаюсь это исправить.)

Я хочу, чтобы запрос переместил это в два столбца, который бы выглядел примерно так:

UPDATE UserAttributes
SET str1 = SUBSTRING(Data, 1, STRPOS(Data, '[email protected]~')),
    str2 = SUBSTRING(Data, STRPOS(Data, '[email protected]~')+3, LEN(Data)-(STRPOS(Data, '[email protected]~')+3))

Но я не могу найти, что существует какой-либо эквивалент strpos.

3 ответа
35

Пользователь charindex:

Select CHARINDEX ('S','MICROSOFT SQL SERVER 2000')
Result: 6

Ссылка на сайт

Важно отметить, что здесь переключается порядок аргументов, что приводит к значительному сокращению количества «строковых или двоичных данных»; ошибки, если вы оставите иголку и стог сена в том же порядке, что и strpos.

от 
0

Если вам нужны ваши данные в столбцах, вот что я использую:

  create FUNCTION [dbo].[fncTableFromCommaString] (@strList varchar(8000))  
RETURNS @retTable Table (intValue int) AS  
BEGIN 

    DECLARE @intPos tinyint

    WHILE CHARINDEX(',',@strList) > 0
    BEGIN   
        SET @intPos=CHARINDEX(',',@strList) 
        INSERT INTO @retTable (intValue) values (CONVERT(int, LEFT(@strList,@intPos-1)))
        SET @strList = RIGHT(@strList, LEN(@strList)[email protected])
    END
    IF LEN(@strList)>0 
        INSERT INTO @retTable (intValue) values (CONVERT(int, @strList))

    RETURN

END

Просто замените "," в функции с вашим разделителем (или, может быть, даже параметризовать его)

10

Функция PatIndex должна дать вам местоположение шаблона как части стро

ки.

PATINDEX ( '%pattern%' , expression )

http://msdn.microsoft.com/en-us/library/ms188395.aspx

Похожие вопросы