webForumDet fria alternativet

Sökning i en "array"

Databaser & SQLur Databashanterare & SQL

5 svar · 550 visningar · startad av inspiro

Medlem sedan sep. 2005673 inlägg
Frågan#1

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)) + '%')
Medlem sedan nov. 20017 144 inlägg
#2

Hmmm. Säkerligen fel databasstruktur.

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
Medlem sedan dec. 200012 464 inlägg
#3
where ',' + <arrayKolumn> + ',' like '%,' + cast(<sifferKolumn> as varchar(10)) || ',%'

Som sagt, helt fel design. Borde egentligen inte svara innan du lovar att ändra ...

Medlem sedan sep. 2005673 inlägg
#4

Hehe. :) Jo, det är väl inte så snyggt kanske... antar att ni vill att arrayen ska ligga i en egen tabell med ett id och varje siffra på egen rad?

Medlem sedan sep. 2005673 inlägg
#5

Jag får felmeddelandet "Syntax near |"

Medlem sedan sep. 2005673 inlägg
#6

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
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
144 ms — hämta tråd, inlägg och bilagor (db)