Autor Zpráva
Chuchycek
Profil
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
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
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
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
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
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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0