Autor | Zpráva | ||
---|---|---|---|
Chuchycek Profil |
#1 · Zasláno: 4. 4. 2014, 11:02:35
Ahoj,
mám sloupec s hodnotami typu 'Novák Petr (85563)' a potřeboval bych z něho nějakým efektivní způsobem získat to číslo. Poradí mi někdo, jak to udělat, co nejefektivněji. Reguláry neumím. H. |
||
Joker Profil |
#2 · Zasláno: 4. 4. 2014, 11:12:27
To vypadá jako typická chyba ukládání více hodnot ve sloupci.
Pokud to tak je, nejlepší řešení nejspíš bude ty údaje rozdělit do dvou sloupců. |
||
juriad Profil |
#3 · Zasláno: 4. 4. 2014, 11:15:53
Pokud je cílem rozdělit to až v PHP a nikdy s tím nebudeš muset pracovat na úrovni databáze:
$pole = preg_split('/\s*[()]\s*/', 'Novák Petr (85563'); array(2) { [0]=> string(11) "Novák Petr" [1]=> string(5) "85563" } Rozděl text tak, že oddělovačem je některá z kulatých závorek, přičemž před ní a za ní mohou být mezery. / - začátek a konec reg. výrazu \s - libovolný bílý znak (mezera, tabulátor, ...) * - předchozí výraz se může vyskytnout libovolněkrát [...] - výčet povolených znaků () - závorky uvnitř výčtu nemají zpeciální význam |
||
Chuchycek Profil |
Joker:
Právě, že já se k těm datům pouze dostávám a nemohu s nimi nijak manipulovat a abych s nimi mohl dál pracovat, tak si chci vytvořit na ty data view ve které už ty data budou ve správné normě. juriad: Díky za pomoc, ale potřebuji to právě v sql. |
||
_es Profil |
Chuchycek:
„potřebuji to právě v sql.“ Vytvor si novú tabuľku a dáta z pôvodnej do nej skopíruj tak, aby v nej boli namiesto jedného stĺpca tri: priezvisko, meno, číslo (asi nejaký identifikátor). |
||
peta Profil |
Chuchycek: Zkousel jsi google? Sikovnej pomocnik, pokud teda nechces cekat min 2 dny na forum.
where: REGEXP, RLIKE select: LOCATE/POSITION + SUBSTR/SUBSTRING, (SUBSTRING_INDEX), (LOCATE+TRIM) http://dev.mysql.com/doc/refman/5.0/en/string-functions.html _es: To on by moc rad, ale nevi, jak to pomoci sql rozdelit na tri udaje, natoz jeden :) |
||
Chuchycek Profil |
#7 · Zasláno: 4. 4. 2014, 15:28:18
peta:
Dík, už jsem to vyřešil pomocí position a substringu, ale tak jsem to dělat nechtěl, bohužel neumím používat v sql regexp, takže se mi všechno ostatní zdá jako velká prasárna... A hlavně nemůžu převádět každý den tabulku s miliony řádků H. |
||
juriad Profil |
#8 · Zasláno: 4. 4. 2014, 15:40:00
Otázkou je, zda v tabulce s miliony řádků takový dotaz vůbec doběhne v rozumném čase. Pak by ti fakt nezbývalo nic jineho, než data každý den přelívat do jiné tabulky.
|
||
Joker Profil |
#9 · Zasláno: 4. 4. 2014, 15:41:22
Chuchycek:
„bohužel neumím používat v sql regexp“ Ono by to stejně nešlo, protože funkce REGEXP v MySQL vrací jen jestli řetězec odpovídá/neodpovídá výrazu, nedá se přes něj vybrat část řetězce. |
||
_es Profil |
#10 · Zasláno: 4. 4. 2014, 16:00:42
Chuchycek:
„A hlavně nemůžu převádět každý den tabulku s miliony řádků“ juriad: „Otázkou je, zda v tabulce s miliony řádků takový dotaz vůbec doběhne v rozumném čase.“ Chuchycek: Záleží, čo je výsledný zmysel tvojej otázky. Ak je to trebárs získanie jedného riadku, obsahujúceho v tom stĺpci 85563 , tak to je jednoduché - stačí zisťovať existenciu textového reťazca 85563 v reťazci v stĺpci. Ak to bude nejaký zložitejší dotaz, tak to bude asi najefektívnejšie najprv tabuľku previesť do použiteľnejšieho tvaru.
|
||
Časová prodleva: 11 let
|
0