Jag har två tabeller som ska matchas ihop. I den ena tabellen finns en sträng som egentligen är en array:
1,2,44,68
I den andra finns ett värde som ska matchas mot arrayen bestående av en siffra, exempelvis siffran "6". Problemet är att om jag har siffran "6" så matchas den även mot "68" så som jag har gjort nu, jag vill att den bara ska matchas mot "6".
Så här har jag försökt göra:
tabell1.abc like '%' + CAST(tabell2.abc as nvarchar(20)) + '%')
Men annars så kan du använda en UD Funktion för det.
CREATE FUNCTION parseString
(
@sIds AS VARCHAR(8000)
)
RETURNS @Ret TABLE(IDs INT)
AS
BEGIN
DECLARE @FirstPos INT
DECLARE @FirstPos1 INT
DECLARE @SecondPos INT
IF ( datalength( @sIds ) > 0 )
BEGIN
SET @FirstPos = 1
SELECT @SecondPos = charindex(',', @sIds, @FirstPos)
WHILE ( @SecondPos > 0 )
BEGIN
INSERT INTO @Ret VALUES( cast( substring( @sIds, @FirstPos, @SecondPos - @FirstPos ) AS INT) )
SET @FirstPos = @SecondPos + 1
SET @SecondPos = charindex( ',', @sIds, @FirstPos ) END
INSERT INTO @Ret VALUES( cast( right( @sIds, datalength( @sIds ) - @FirstPos + 1 ) AS INT ) )
END
RETURN
END
--Något liknande
SELECT tabell1.abc
FROM tabell1
INNER JOIN parseString(tabell2.abc) ids ON ids.IDs = tabell1.id
Bytte ut det mot ett + istället... och så gäller det då att strängen (arrayen) både börjar och slutar med ett komma. Jupp, ajg lovar att jag ska göra om det här men det får funka tills vidare. Tack! :)
147 ms totalt · 3 externa anrop · v20260731065814-full.55e59744