SQL Server: أي ما يعادل Stropos ()؟
-
11-09-2019 - |
سؤال
أنا أتعامل مع قاعدة بيانات مزعجة حيث يحتوي حقل واحد على ما يجب تخزينه حقا اثنين من الحقول المنفصلة. لذلك يتم تخزين العمود شيئا مثل "السلسلة الأولى ~ @ ~ ~ السلسلة الثانية"، حيث "~ @ ~" هو محدد. (مرة أخرى، لم أقم بتصميم هذا، أنا أحاول فقط إصلاحه.)
أريد استعلام لنقل هذا إلى أعمدة، من شأنها أن تبدو مثل هذا:
UPDATE UserAttributes
SET str1 = SUBSTRING(Data, 1, STRPOS(Data, '~@~')),
str2 = SUBSTRING(Data, STRPOS(Data, '~@~')+3, LEN(Data)-(STRPOS(Data, '~@~')+3))
لكنني لا أستطيع أن أجد أن أي ما يعادل stroppos.
المحلول
نصائح أخرى
يجب أن تعطيك وظيفة 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)-@intPos)
END
IF LEN(@strList)>0
INSERT INTO @retTable (intValue) values (CONVERT(int, @strList))
RETURN
END
مجرد استبدال "،" في الوظيفة مع محدد (أو ربما حتى يذكره)
لا تنتمي إلى StackOverflow