webForumDet fria alternativet

Hitta oriktiga tecken

Databaser & SQLur Databashanterare & SQL

6 svar · 907 visningar · startad av www

wwwMedlem sedan nov. 200633 inlägg
#1

Tragglat på länge med att försöka hitta otillåtna tecken med SQL. Tillåtna är A-Z, 0-9 samt ett bindestreck (-).

Börjat som nedan. Problemet är att oriktiga tecken (som (#¤%&) kan finnas var som helst i teckenkodkod. Det kan lika gärna vara första som det åttonde eller det sista tecknet.

SELECT id, teckenkod
FROM tabell
WHERE teckenkod NOT LIKE '[- OR A-Z OR 0-9]*'
OR teckenkod NOT LIKE '?[- OR A-Z OR 0-9]*'
OR teckenkod NOT LIKE '??[- OR A-Z OR 0-9]*'
OR teckenkod NOT LIKE '???[- OR a-z OR 0-9]*'
OR teckenkod NOT LIKE '????[- OR A-Z OR 0-9]*'
OR teckenkod NOT LIKE '?????[- OR A-Z OR 0-9]*'
OR teckenkod NOT LIKE '??????[- OR A-Z OR 0-9]*'
OR teckenkod NOT LIKE '???????[- OR A-Z OR 0-9]*'
OR teckenkod NOT LIKE '????????[- OR A-Z OR 0-9]*'
OR teckenkod NOT LIKE '?????????[- OR A-Z OR 0-9]*'
OR teckenkod NOT LIKE '??????????[- OR A-Z OR 0-9]*'
OR teckenkod NOT LIKE '???????????[- OR A-Z OR 0-9]*'
OR teckenkod NOT LIKE '?????????????[- OR A-Z OR 0-9]*'
OR teckenkod NOT LIKE '??????????????[- OR A-Z OR 0-9]*'
OR teckenkod NOT LIKE '???????????????[- OR A-Z OR 0-9]*'
OR teckenkod NOT LIKE '????????????????[- OR A-Z OR 0-9]*'
OR teckenkod NOT LIKE '?????????????????[- OR A-Z OR 0-9]*'
OR teckenkod NOT LIKE '??????????????????[- OR A-Z OR 0-9]*'
OR teckenkod NOT LIKE '???????????????????[- OR A-Z OR 0-9]*');

Jokertecknet i sist i stängen (*) ställer till det. Saker som jag inte vill se visas. Trasslar in mig ändå mer då jag försöker få bukt på det.

Dessutom känns det klumpigt formulerat.

Peter SMedlem sedan dec. 20025 483 inlägg
#2

Teckenkoderna bör nog lämpligtvis valideras innan de matas in i tabellen. Vilket DBMS? Om MySQL kan du testa

select id
     , teckenkod
  from tabell
 where teckenkod regexp '^([[:alnum:]]|-)+$';
wwwMedlem sedan nov. 200633 inlägg
#3

Jag använder MS Access.

Regexp verkar vara ett bra uttryck. Ett stöd eller utveckling av sökning med jokertecken.
Kan man uttrycka det så?

Får det inte att fungera i Access. Troligt att jag skriver fel.

Går regexp att använda I MS Access?
Hur skriver man SQLen i så fall?
Om inte, hur går jag då tillväga?

Peter SMedlem sedan dec. 20025 483 inlägg
#4

Regexp går ej att använda i Access. Jag är litet osäker på huruvida följande fungerar

select id
     , teckenkod
  from tabell
 where teckenkod not like '*[!A-Z!0-9!-]*'

Annars kanske du får skriva en egen funktion som du kan använda i Access.

wwwMedlem sedan nov. 200633 inlägg
#5

Tack för informationen.

Får det att funka med LIKE istället för NOT LIKE. Men inte fullt ut som jag vill. Och det blir lite trubbigt.

SELECT id, teckenkod
FROM tabell
WHERE teckenkod Like '*[§!"#*%&/]*';

Går säkert med fler tecken, men alla funkar ej. Får prova mig fram.
Men undrar vaför inta alla funkar. Dessutom blir det väldigt mycket text mellan [ och ] ... Känns som det borde finnas något smidigare sätt.
Vilka funkar tecken ej? Varför inte?
Observera att det funkar att ha jokertecknet * inom hakparentesen

Vilka tecken kan jag sätta inom hakparentes?
Det funkar inte med alla.
Går det att förenkla på något sätt?
ASCII-kod?
Eller något annat trix?
Eller skriva SQLen på annat sätt?

Peter SMedlem sedan dec. 20025 483 inlägg
#6

Som du skriver fungerar ej samtliga tecken enligt mönstret ovan. I Access har vissa tecken speciell betydelse. Några detta gäller är '#', '!', '-', '*' och '?'. Dessutom har vi ju höger och vänster hakparentes. Vad gäller exklamationstecknet bör det placeras sist inom mängden eftersom det annars negerar efterföljande tecken. De tecken som är speciella kan du testa att sätta hakparenteser kring: '*[[#][%]]' (dock är jag osäker på om detta fungerar).

Annars verkar den bästa lösningen vara att skriva en egen funktion som utnyttjar RegExp-objektet.

wwwMedlem sedan nov. 200633 inlägg
#7

Gjorde strängen så här

'*[
!"#$%&()*+,-./:;<=>?@
[\^_`{|}~`ÅÄÖ]*'

Testade mig fram. Med radbrytning före går det att ha med både utropstecken och vänster hakparentes. Den högra hakparentesen och apostrofen fick jag dock inte med.

Nöjer mig så. Fick med alla skrivbara (nästan) ASCII upp till 27, och de svenska från den utökade. Nöjer mig så, även om det blev lite knöligt.

MS Access har sina begränsningar, verkar det. Dröjer nog innan jag har tillgång till något annat.

Kul att få inblick i vad som kan göras och skillnader mellan olika DBMS.

Tack för hjälpen.

130 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)