Προς το περιεχόμενο

sql like σε πεδία με πολλές λέξεις


heavyaris

Προτεινόμενες αναρτήσεις

Δημοσ.

παιδιά, έχω μια βάση, που είναι διάφοροι πελάτες κάποιου κυρίου. τα δεδομένα τα έχω κάνει import απο xls αρχείο που μου δώθηκε. το κακό είναι όμως ότι, αυτό το xls, είχε ένα πεδίο: "επωνυμία/όνομα" στο οποίο γίνεται ένας αχταρμάς, δηλαδή περιέχει: όνομα ή επίθετο ή αν είναι συνέταιροι 2 ονόματα κ ένα ή 2 επίθετα, ή επωνυμία εταιρείας, ή όλα μαζί σε ακανόνιστη σειρά. μερικά παραδείγματα περιεχομένων του πεδίου είναι: (τυχαια ονόματα)

>Όνομα/επωνυμία:
ηλιας νικολάου
νικολάου ηλίας
αφοι νικολάου Α.Ε
ηλίας νικολάου κ ιυος
νικολάου ηλίας - ηλιαδου μαρια
"το λουλουδι" - νικολάου ηλίας

και οι παραλλαγές όπως καταλαβαίνετε δεν έχουν τελειωμό.

 

Αυτό που θέλω είναι με ένα ερώτημα στην βάση να βγαίνουν τα ονόματα, έτσι στην προσπάθεια μου χρησιμοποίησα το like

>SELECT * FROM clients where name like '%ηλιας%' 

το οποίο επιφέρει δικαιολογημένα τελείως λανθασμενα αποτελέσματα μερικες φορές όπως: εάν ψάχνω το όνομα άρης, επιστρέφει εγγραφές του στύλ: γρυπάρης ηλίας ή βούλγαρης ιωάννης

Γνωρίζω οτι φυσικά το αυτονόητο είναι να είναι τα πεδία ξεχωριστα (όνομα, επώνυμο, εταιρεία) αλλά και έτσι να ήταν, πάλι όταν κάποιος ήταν συνέταιρος θα υπήρχαν 2 η περισσότερα ονόματα σε ένα πεδίο. Εκτός αυτού, δεν υπάρχει περίπτωση να κάτσω να τα καθαρίσω γιατι είναι 6000 εγγραφές.

υπάρχει περίπτωση να βγάλω καμμιά άκρη;

ευχαριστώ.

Δημοσ.

αν βάλεις κενό πριν και κενό μετά λογικά δε θα σου βγάζει κομμάτια λέξεων

 

SELECT * FROM clients where name like '% ηλιας%' or name like '%ηλιας %'

Δημοσ.

Γιατι ψαχνεις το Ηλιας που ειναι ονομα και δεν ψαχνεις το Νικολαου

πχ

SELECT * FROM clients where name like '%νικολάου%';

το επιθετο δεν θα εχει πολλα ομοια του

 

---------- Προσθήκη στις 11:54 ---------- Προηγούμενο μήνυμα στις 11:43 ----------

 

Για δοκιμασε αυτο:

SELECT * FROM clients where name like '%νικολάου_ηλίας%' or name like '%ηλίας_νικολάου%';

Δημοσ.

δυστυχως φίλε επιστρέφει και άλλα επίθετα όπως ΚΑΚΑΡΗΣ ΛΑΣΚΑΡΗΣ ΤΣΑΛΔΑΡΗΣ ΓιΑΝΝΑΡΗΣ κλπ εαν δώσω το άρης..

 

αυτό όμως που μου πρότειναν δουλέυει:

>SELECT * FROM clients where name REGEXP '[[:<:]](ΑΡΗΣ)[[:>:]]'

Δημοσ.
δυστυχως φίλε επιστρέφει και άλλα επίθετα όπως ΚΑΚΑΡΗΣ ΛΑΣΚΑΡΗΣ ΤΣΑΛΔΑΡΗΣ ΓιΑΝΝΑΡΗΣ κλπ εαν δώσω το άρης..

 

αυτό όμως που μου πρότειναν δουλέυει:

>SELECT * FROM clients where name REGEXP '[[:<:]](ΑΡΗΣ)[[:>:]]'

 

Δεν θές το ίδιο και για το 'ΑΡΗΣ?

Άν είναι γραμμένο σαν Γιαννάρης ή Γιανναρης στο φέρνει;

 

Δές και αυτό

>
Select * from CLIENTS with (nolock)
where upper(name) like upper('%αρης%')
or  upper(name)  like UPPER('%άρης%')
or  upper(name)  like UPPER('%άρησ%')
or  upper(name)  like UPPER('%αρης%')

Δημοσ.
REGEXP????

πρωτη φορα το βλεπω αυτο στην sql

αλλα αφου δουλευει ok

 

το like με wildcard (%) τι νομίζεις είναι;

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...