Mysql szűrés bármire, amiben nincs egy angol betű sem
Sziasztok,
szavakat szeretnék kiszűrni egy mysql adatbázis oszlopában úgy, hogy minden érték kapjon status="0"-t, amiben akárcsak egyetlen angol betű sincs.
Amiket találtam Stackoverflow-on példákat, azok kizárólagos egyezéseket néztek regexp-es "A-Z" logikával, de ez nekem nem jó, mert az á,é,č,ä betűket tartalmazó szavakat is "0"-ra tették.
Példa szavak:
lány
óra
ängie
وجدي
joy
sőt
용환
иунчи
tango
ชุมพล
Ezekből szeretném, ha ezekre kerülne "0" érték (vagyis amiben tényleg egy db angol betű sincs):
وجدي
용환
иунчи
ชุมพล
Értelmetlen szavak (mint pl. éőáé) nincsenek az adatbázisban, így csak az angol abc betűinek figyelése elég.
Tudtok erre megoldást?
Köszi,
Akka
re: Mysql szűrés bármire, amiben nincs egy angol betű sem
Update, sikerüt megoldani egy rendkívül elegáns megoldással :D
UPDATE adatbazis SET status ="0" WHERE adat NOT LIKE "%a%" and title NOT LIKE "%b%" and title NOT LIKE "%c%" and title NOT LIKE "%d%" and title NOT LIKE "%e%" and title NOT LIKE "%f%" and title NOT LIKE "%g%" and title NOT LIKE "%h%" and title NOT LIKE "%i%" and title NOT LIKE "%j%" and title NOT LIKE "%k%" and title NOT LIKE "%l%" and title NOT LIKE "%m%" and title NOT LIKE "%n%" and title NOT LIKE "%o%" and title NOT LIKE "%p%" and title NOT LIKE "%q%" and title NOT LIKE "%r%" and title NOT LIKE "%s%" and title NOT LIKE "%t%" and title NOT LIKE "%u%" and title NOT LIKE "%v%" and title NOT LIKE "%w%" and title NOT LIKE "%x%" and title NOT LIKE "%y%" and title NOT LIKE "%z%";
re: Mysql szűrés bármire, amiben nincs egy angol betű sem
Így esetleg? :)
PHP kód:
WHERE adat NOT REGEXP '[\u00C0-\u1FFF\u2C00-\uD7FF\w]'
re: Mysql szűrés bármire, amiben nincs egy angol betű sem
Idézet:
djjean eredeti hozzászólása
Így esetleg? :)
PHP kód:
WHERE adat NOT REGEXP '[\u00C0-\u1FFF\u2C00-\uD7FF\w]'
Következő körben kipróbálom ezt :)
re: Mysql szűrés bármire, amiben nincs egy angol betű sem
Where után adat helyett title kell. Csak véletlenül kibökte a szemem. :-) Egyébként tényleg rendkívül elegáns és hatékony megoldás. :-)
re: Mysql szűrés bármire, amiben nincs egy angol betű sem
Idézet:
Akka eredeti hozzászólása
Update, sikerüt megoldani egy rendkívül elegáns megoldással :D
UPDATE adatbazis SET status ="0" WHERE adat NOT LIKE "%a%" and title NOT LIKE "%b%" and title NOT LIKE "%c%" and title NOT LIKE "%d%" and title NOT LIKE "%e%" and title NOT LIKE "%f%" and title NOT LIKE "%g%" and title NOT LIKE "%h%" and title NOT LIKE "%i%" and title NOT LIKE "%j%" and title NOT LIKE "%k%" and title NOT LIKE "%l%" and title NOT LIKE "%m%" and title NOT LIKE "%n%" and title NOT LIKE "%o%" and title NOT LIKE "%p%" and title NOT LIKE "%q%" and title NOT LIKE "%r%" and title NOT LIKE "%s%" and title NOT LIKE "%t%" and title NOT LIKE "%u%" and title NOT LIKE "%v%" and title NOT LIKE "%w%" and title NOT LIKE "%x%" and title NOT LIKE "%y%" and title NOT LIKE "%z%";
nem tudom aktualis-e meg, de ha ez folyamatos keresgeles lesz akkor a like-nal lehet erdemes lenne gyorsabb megoldast talalni, foleg ha nagy az adatbazis.
Probalhatod szimplan CAST-olt stringet osszehasonlitani az eredetivel ha csak 8bites karaktereket akarsz megtartani:
Kód:
UPDATE adatbazis SET status ="0" WHERE title<>CAST(title AS VARCHAR)
Vagy probalhatod tsql pathindex-el:
Kód:
UPDATE adatbazis SET status ="0" WHERE PATINDEX('%[A-Z]%',UCASE(title))<=0
Vagy hasznalhatsz store procedure-t es azt hivod meg a query-ben
Ha csak egyzer-egyszer kell megnezned akkor igazabol tok mindegy.