Леший Posted September 2, 2010 Report Share Posted September 2, 2010 (edited) Sveiki, problēma sekojoša: ir lauks tabulā, kur ir teksts, apmēram šāds: <text1, text2, >asdf qwer.<, text3> Vajag tikai ar query izņemt to "asdf qwer.". Viss teksts ir vienā fieldā. EDIT: ar <..> atzīmēju tekstus, kas var nebūt. Edited September 2, 2010 by Леший Quote Link to comment Share on other sites More sharing options...
Gints Plivna Posted September 2, 2010 Report Share Posted September 2, 2010 Pirmais kas nāk prātā: Ja runa par Mysql, tad CASE, LOCATE, SUBSTR un iespējams arī SUBSTRING_INDEX kombinācija :) Ja runa par Oracle, tad CASE, INSTR un SUBSTR kombinācija. Pie tam INSTR Oraclē var izdarīt krietni vairāk nekā MySqlā, savukārt Oraclē tieši nav f-jas SUBSTRING_INDEX, kas ir MySqlā. Gints Plivna http://datubazes.wordpress.com Quote Link to comment Share on other sites More sharing options...
Kaklz Posted September 2, 2010 Report Share Posted September 2, 2010 Ja izņemamais fragments vienmēr atrodas starp > un <, tad itkā tas ir salīdzinoši vienkārši. update table set field = concat(substr(field, 0, locate(field, '>')), substr(field, locate(field, '<')+1)) Ja ir vairāki tādi fragmenti, tad attiecīgi var vnk vairākas reizes palaist, kamēr affected rows=0. Tu gan paskaties, vai viss ir korekti pirms laišanas, jo rakstīju no galvas, netestēju :) Quote Link to comment Share on other sites More sharing options...
Леший Posted September 2, 2010 Author Report Share Posted September 2, 2010 (edited) Kaklz, tu nesaprati, tur nav nekādu < un >, es tos izmantoju, lai atzīmētu tekstus, kas var nebūt. Precīzēšu: text1, text2, asdf qwer., text3 textN var neeksistēt, asdf vietā var būt dajebkas, nemainās konkrēti 'qwer.', un ir jāatlasā '<vārds_pirms_qwer.><atstarpe>qwer.' Gints Plivna, MySQL. Edited September 2, 2010 by Леший Quote Link to comment Share on other sites More sharing options...
Kaklz Posted September 2, 2010 Report Share Posted September 2, 2010 Iedod kādas 10 rindas +/- reālus parauga datus un paredzamos rezultātus, būs skaidrāks ap ko lieta grozās. "qwer." ir fiksēts teksts pirms kura atstarpes ir tas, kas ir jāizravē? Quote Link to comment Share on other sites More sharing options...
Леший Posted September 2, 2010 Author Report Share Posted September 2, 2010 (edited) 'text1, asdf qwer.' > jāatlasā 'asdf qwer.' 'qwer qwer.' > jāatlasā 'qwer qwer.' 'fdsa qwer., text1' > jāatlasā 'fdsa qwer.' 'text1, text2, ftyuj qwer., text3' > jāatlasā 'ftyuj qwer.' 'text1, text2' > jāatlasā '' EDIT: Ērtībai ieboldēju to, ko jāatlasā. Edited September 2, 2010 by Леший Quote Link to comment Share on other sites More sharing options...
Kaklz Posted September 2, 2010 Report Share Posted September 2, 2010 kaut kas šitāds? CREATE TABLE `zz` ( `id` tinyint(4) NOT NULL auto_increment, `z` varchar(200) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ; -- -- Dumping data for table `zz` -- INSERT INTO `zz` (`id`, `z`) VALUES (1, 'text1, asdf qwer.'), (2, 'qwer qwer.'), (3, 'fdsa qwer., text1'), (4, 'text1, text2, ftyuj qwer., text3'), (5, 'text1, text2'); SELECT z, trim(leading 'qwer, ' from trim(leading ', ' from concat( reverse(substring( reverse( substring( z, 1, locate('qwer.',z)-2 ) ), locate( ',', reverse( substring( z, 1, locate('qwer.',z)-2 ) ) ) + 1 )), ', ', 'qwer.', substring( z, locate('qwer.',z)+5) ))) FROM `zz` WHERE z like '%qwer.%' ir gan liekas vēl pāris nianses, bet tās arī teorētiski var risināt. Quote Link to comment Share on other sites More sharing options...
Леший Posted September 2, 2010 Author Report Share Posted September 2, 2010 Ne gluži, apskaties iepriekšējo postu, bet paprovēšu tavu query modificēt. Quote Link to comment Share on other sites More sharing options...
Gints Plivna Posted September 2, 2010 Report Share Posted September 2, 2010 Izmantoju iepriekšējā atbildētāja laipni izveidotos skriptus, ko posta autors jau nu varēja iedot pats. mysql> select case when instr(z, 'qwer.') > 0 -> then trim(concat(substring_index( -> substring_index(z, 'qwer.', 1), -> ' ', -2), -> 'qwer.')) -> else '' end -> as result -> from zz; +-------------+ | result | +-------------+ | asdf qwer. | | qwer qwer. | | fdsa qwer. | | ftyuj qwer. | | | +-------------+ 5 rows in set (0.00 sec) Gints Plivna http://datubazes.wordpress.com/ Quote Link to comment Share on other sites More sharing options...
Леший Posted September 2, 2010 Author Report Share Posted September 2, 2010 Ginta variants strādā, paldies! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.