i.p.v. ISNUMMERIC, specifiek op alphanummernic = 5 + ISnummeric = 3

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Maurice Oost

Maurice Oost

20/08/2019 21:31:57
Quote Anchor link
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)
 
PHP hulp

PHP hulp

29/03/2024 02:16:40
 
Rob Doemaarwat

Rob Doemaarwat

20/08/2019 22:10:10
Quote Anchor link
MySQL kent de REGEXP operator, dus dan
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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)
 
Thomas van den Heuvel

Thomas van den Heuvel

20/08/2019 22:13:11
Quote Anchor link
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.
 
Maurice Oost

Maurice Oost

20/08/2019 22:35:35
Quote Anchor link
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)
 
- Ariën  -
Beheerder

- Ariën -

20/08/2019 22:49:05
Quote Anchor link
REGEXP hoort in een conditie, zoals bijv. een WHERE.
 
Rob Doemaarwat

Rob Doemaarwat

20/08/2019 22:50:07
Quote Anchor link
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):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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.
Gewijzigd op 20/08/2019 22:56:31 door Rob Doemaarwat
 
Maurice Oost

Maurice Oost

20/08/2019 22:54:18
Quote Anchor link
Heren, ik gebruik MSSQLserver 2014
 
Rob Doemaarwat

Rob Doemaarwat

20/08/2019 22:57:35
Quote Anchor link
Ja, dacht ik al. Zie mijn antwoord hierboven met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
and u.dummy4 like '[A-Z][A-Z][A-Z][A-Z][A-Z][0-9][0-9][0-9]' ...
 
Maurice Oost

Maurice Oost

20/08/2019 23:00:26
Quote Anchor link
Ja werkt, weer wat bij geleerd, super bedankt
 
Rob Doemaarwat

Rob Doemaarwat

20/08/2019 23:08:13
Quote Anchor link
Maurice Oost op 20/08/2019 23:00:26:
weer wat bij geleerd

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



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.