[mysql] regexp in where

Pagina: 1
Acties:

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Het geval is dit:
ik heb twee tabellen. Een met recente data en een met oude data. Van die oude data wil ik alleen alles aan de nieuwe toevoegen wat niet overeenkomt. Nou is er alleen nogal slordig ingevoerd dus een WHERE tabel1.veld1 = tabel2.veld1 zal niet 100% goed werken.
Om dit nu te verbetern wilde ik van een bepaald veld gewoon de eerste 5 karakters matchen. Echter dat wil me niet lukken. Ik heb nu:
code:
1
AND t.adres REGEXP '^'.substring(ba.adres,1,5)
Dat was het beste wat ik kon verzinnen. alleen die . als connective gaat dus niet. Een + gaf mysql geen foutmelding op, maar gaf ook het gewenste effect niet. Ik kreeg wel wat resultaten, maar kon niet goed nagaan hoe die het nou gelezen had. Waren in iedergeval niet de gewenste resultaten. Kon de oplossing op mysql.com nergens in de handleiding vinden.
De regel code is dus onderdeel van een select query en kan gelezen worden als:
EN WAAR kolom adres van tabel t OVEREENKOMT MET de eerste 5 karakters van kolom adres van tabel ba
Hoe maak ik dit kloppend?


p.s. ik output een serie update queries (als tekst) dmv een php scriptje, en die queries laat ik vervolgens weer op de database los. Op die manier kan ik dus met het oog ook nog even controleren of die regex wel goed heeft uitgepakt alvorens ik de daadwerkelijke update doe.

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
met CONCAT kun je strings aan elkaar plakken, zie String Functions.

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
ok
maar wat ik eigenlijk bedoelde
normaal zet je die regexp tussen quotes. Echter ik wil niet op het woord substriing matchen, maar de functie gebruiken. dus die moet buiten de quotes. Maar hoe zorg ik dan dat het toch 1 geheel wordt met de ^ (dakje) die er voor zorgt dat ie het op het begin van de string matched? Dat kan volgens mij met concat niet.
Nee, ik heb het even geprobeerd
code:
1
AND t.adres REGEXP CONCAT ('^',substring(ba.adres,1,5))
en werkt dus niet

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Bij mij werkt het wel hoor.

Geef anders ff de foutmelding die je krijgt.

[ Voor 49% gewijzigd door marcusk op 28-11-2002 21:58 ]


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
You have an error in your SQL syntax near '('^',substring(ba.adres,1,5)) GROUP BY id' at line 1

btw, heb mysql versie 3.23.36

[ Voor 26% gewijzigd door marty op 30-11-2002 00:10 ]


  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 31-03 16:47

CyberSnooP

^^^^ schrijft --->

Misschien heel lullig, maar is het niet gewoon de spatie tussen CONCAT en de argumenten waardoor MySQL denkt dat CONCAT je regexp is en (...) iets onbekends (dus foutmelding).

|_____vakje______|


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Waarom niet gewoon:
SQL:
1
AND substring(t.adres, 1, 5) = substring(ba.adres, 1, 5)

:?

[ Voor 10% gewijzigd door Annie op 30-11-2002 00:51 ]

Today's subliminal thought is:


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
hey, cool! Beide oplossing werken!
Die van jou is wel slim gevonden annie...dat ik er zelf niet op was gekomen :-)

Heel erg bedankt
Pagina: 1