Voorbeeld:
In dummy4 heb ik de volgende waarde staan, “ KEUZE123 “
Hoe kan ik i.p.v. ISNUMMERIC, specifiek op alphanummernic = 5 + ISnummeric = 3 doen.

De waarde is altijd eerst karakters aansluitend door nummers.

select u.dummy4, U.NAME, u2.dummy4, U2.NAME
from tb_Users u inner join tb_Users_Ext e on e.id_user=u.id_user
inner join tb_Users u2 on u2.dummy4=u.dummy4 and u.id_user < u2.id_user
where e.ExtID is not null and u.status in (1)
and u.Dummy4 is not null and ISNUMERIC(u.dummy4) = 1 and len(u. dummy4)=8 and u2.status in (1)
and u.dummy4 in (select dummy4 from tb_users group by dummy4 having count(dummy4)> 1)
MySQL kent de REGEXP operator, dus dan
and u.dummy4 regexp '^[A-Z]{5}[0-9]{3}$' ...

^ = begin (voorkomt dat "whateverKEUZE123" ook een match is)
[A-Z]{5} = 5 karakters A t/m Z
[0-9]{3} = 3 karakters 0 t/m 9
$ = einde (voorkomt dat "KEUZE123whatever" ook een match is)
Dit klinkt als een patroon.

Op het moment dat je patroon hoort kun je denken aan een reguliere expressie.

Dit is wel weer een voorbeeld van informatie die versleuteld in je database zit, je moet ook weer een (hoop) moeite doen om deze er uit te peuteren en dat zou je moeten vermijden.
Hi Rob,
bedankt voor je snelle reactie, helaas krijg ik een fout melding.
kan je me vertellen hoe ik dit fix en wat de reden is.

Msg 4145, Level 15, State 1, Line 5
An expression of non-boolean type specified in a context where a condition is expected, near 'regexp'.

select u.dummy4, U.NAME, u2.dummy4, U2.NAME
from tb_Users u inner join tb_Users_Ext e on e.id_user=u.id_user
inner join tb_Users u2 on u2.dummy4=u.dummy4 and u.id_user < u2.id_user
where e.ExtID is not null and u.status in (1)
and u.Dummy4 is not null and u.dummy4 regexp '^[A-Z]{5}[0-9]{3}$' and len(u. dummy4)=8 and u2.status in (1)
and u.dummy4 in (select dummy4 from tb_users group by dummy4 having count(dummy4)> 1)
REGEXP hoort in een conditie, zoals bijv. een WHERE.
Welke database (MySQL, MariaDb, MS SQL Server, Oracle, PostgreSQL, ...) en welke versie gebruik je? Het lijkt er op dat je database dit commando niet ondersteunt ...

Aan de foutmelding te zien MS SQL Server. Daar is de LIKE syntax wat uitgebreider en kun je (blijkbaar):

and u.dummy4 like '[A-Z][A-Z][A-Z][A-Z][A-Z][0-9][0-9][0-9]' ...


Als het werkt kun je die len(u.dummy4)=8 overigens wel weg laten, want dat wordt ook al door de regex/like gecontroleerd.
Heren, ik gebruik MSSQLserver 2014

Ja, dacht ik al. Zie mijn antwoord hierboven met
and u.dummy4 like '[A-Z][A-Z][A-Z][A-Z][A-Z][0-9][0-9][0-9]' ...
Ja werkt, weer wat bij geleerd, super bedankt
Maurice Oost op 20/08/2019 23:00:26

weer wat bij geleerd

Ik ook: dat je blokhaken moet escapen voor MS SQL ...

Reageren