Avatar billede ghost1 Nybegynder
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...
Avatar billede arne_v Ekspert
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#
Avatar billede ghost1 Nybegynder
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 ?
Avatar billede ghost1 Nybegynder
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..
Avatar billede arne_v Ekspert
18. november 2005 - 23:09 #4
2005 har den nye feature at du kan skrive din egen function (som kan bruges i SQL)
i C# (eller et andet .NET sprog)

men det lyder som om det bliver den hårde måde: op i et array og kod det hele selv
Avatar billede ghost1 Nybegynder
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
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester