16. november 2005 - 23:51
Der er
4 kommentarer og
1 løsning
forskellige kombinationer ud fra et varenummer i SQL
Hej
Jeg har brug for en sql sætning der udfra et varenummer på 8 tal/bogstaver - XXXXXXXX kan finde andre varenumre der minder om det varenummer jeg søger på. feks BCXXXXXX - udfra dette skulle den så kunne finde følgende 3 andre varenumre hvis det findes i DataBasen - 8CXXXXXX, B6XXXXXX og 86XXXXXX.
Jeg har brugt vildcards i min søgning, men den er ikke 100%. Der skal tjekkes udfra nedenstående liste.. Ved ikke om det kan lade sig gøre at lave 100% i SQL , brugte også ASP til min løsning, der så ikke viste sig at være god nok.
Håber der er en derude med et svar, for den er sgu lidt kompleks..
B tjekkes som 8
8 tjekkes som B
G tjekkes som C
C tjekkes som G
G tjekkes som 6
6 tjekkes som G
Z tjekkes som 2
2 tjekkes som Z
5 tjekkes som S
S tjekkes som 5
200 point til den der kan løse den eller komme med den endelige ide til det...
16. november 2005 - 23:58
#1
sagt med andre ord: du skal kunne håndtere fejl scanninger
hvis ikke du kan bruge SOUNDEX funktionen (og det tror jeg ikke) så skal
du flytte logikken op i applikationen (hvor den må være nem at lave)
man kan lave user functions og streng manipulation, men TSQL er ikke
det rigtige værktøj til det
hvis du er på 2005 må du kunne lave en user function i C#
17. november 2005 - 00:05
#2
Jeg ville helst kunne kombinere det med SQL og ASP - men vil da ikke udelukke at det kunne være C# - har bare resten af programmet færdigt i asp.. men grundlæggende må logikken også kunne bruges i hvilket som helst sprog ik ?
17. november 2005 - 00:08
#3
problemet er jo lidt at man kan få temmelig mange kombinationer.. men det kan selvfølgelig begrænses ved hjælp af wildcards.. feks på eksemplet jeg gav i starten "BCXXXXXX" hvor wildcardet så ville være "__XXXXXX" , så ville man da begrænse mængden af data den skal søge igennem..
23. november 2005 - 13:28
#5
Fandt selv ud af det.. det hele skrevet i SQL og lagt som en stored procedure
Har så yderligere oprettet en tabel indeholdende (SymbolMix) der har alle de kombinationer liggende der kan søges på..
CREATE PROCEDURE [dbo].[GetRefNumberMix]
@strRefNumber nchar(8)
AS
SELECT * FROM RefNumbers
WHERE Id IN (SELECT Id FROM RefNumbers INNER JOIN SymbolMix ON (MixSymbol = SUBSTRING(RefNumber, 1, 1) AND Symbol = SUBSTRING(@strRefNumber, 1, 1)))
AND Id IN (SELECT Id FROM RefNumbers INNER JOIN SymbolMix ON (MixSymbol = SUBSTRING(RefNumber, 2, 1) AND Symbol = SUBSTRING(@strRefNumber, 2, 1)))
AND Id IN (SELECT Id FROM RefNumbers INNER JOIN SymbolMix ON (MixSymbol = SUBSTRING(RefNumber, 3, 1) AND Symbol = SUBSTRING(@strRefNumber, 3, 1)))
AND Id IN (SELECT Id FROM RefNumbers INNER JOIN SymbolMix ON (MixSymbol = SUBSTRING(RefNumber, 4, 1) AND Symbol = SUBSTRING(@strRefNumber, 4, 1)))
AND Id IN (SELECT Id FROM RefNumbers INNER JOIN SymbolMix ON (MixSymbol = SUBSTRING(RefNumber, 5, 1) AND Symbol = SUBSTRING(@strRefNumber, 5, 1)))
AND Id IN (SELECT Id FROM RefNumbers INNER JOIN SymbolMix ON (MixSymbol = SUBSTRING(RefNumber, 6, 1) AND Symbol = SUBSTRING(@strRefNumber, 6, 1)))
AND Id IN (SELECT Id FROM RefNumbers INNER JOIN SymbolMix ON (MixSymbol = SUBSTRING(RefNumber, 7, 1) AND Symbol = SUBSTRING(@strRefNumber, 7, 1)))
AND Id IN (SELECT Id FROM RefNumbers INNER JOIN SymbolMix ON (MixSymbol = SUBSTRING(RefNumber, 8, 1) AND Symbol = SUBSTRING(@strRefNumber, 8, 1)))
AND RefNumber <> @strRefNumber
AND Accepted = 1
GO