Ответ 1
Пользовательский charindex:
Select CHARINDEX ('S','MICROSOFT SQL SERVER 2000')
Result: 6
Я имею дело с раздражающей базой данных, где одно поле содержит то, что действительно должно храниться в двух отдельных полях. Таким образом, в столбце хранится нечто вроде "Первая строка ~ @~ Вторая строка", где "~ @~" является разделителем. (Опять же, я не проектировал это, я просто пытаюсь это исправить.)
Я хочу, чтобы запрос переместил это на два столбца, которые выглядели бы примерно так:
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.
Пользовательский charindex:
Select CHARINDEX ('S','MICROSOFT SQL SERVER 2000')
Result: 6
Функция PatIndex должна указывать местоположение паттерна как часть строки.
PATINDEX ( '%pattern%' , expression )
Если вам нужны ваши данные в столбцах, это то, что я использую:
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
Просто замените ',' в функции вашим разделителем (или, возможно, даже параметризуйте его)