2 питания

8 отговора 362 прегледа
#1

2 питания

Имам 2 питания. Моля за вашата помощ!

1. Имам сървар с инсталиран MySQL и проблем със следната заявка
SELECT name FROM table1 WHERE name LIKE '%Я%'
не ми дава имена в които има малко 'я'
проблема е същия и с 'Ч' и 'ч', с останалите букви няма проблем
какво да правя, къде е проблема?

2. Как да напиша заявяка, която сменя част на съдържанието от дадено поле
например: искам навсякъде където в полето name има 'xxxYYYzzzz' да го сменя с 'xxxHELLOzzzz'

Благодаря предварително!

Отговор
в отговор на Lizard #2

Re: 2 питания

1. Znachi pren tezi zaqvki rabotqt (!??!) kompiliral li si MySQL-a s --with-charset=cp1251 ??

2.Ne razbiram chak tolkova ot zaqvki no tova shte stane lesno s ereg_replace()

Отговор
в отговор на Lizard #3

Re: 2 питания

1. При мен също работи
2. Напиши update заявка като тази например:

update table1 set FName = 'xxxYYYzzzz' where FName = 'xxxHELLOzzzz';

Отговор
в отговор на Lizard #4

Re: 2 питания

Opitai naistina da go kompilirash s cp1251...

Vsashtnost koia versia e MySQL-a ???

Shtoto pri men na 3.22.32 (vsashtnost, tova beshe mnoogo otdavna) imashe problem s bukvata "ч".

Отговор
в отговор на Lizard #5

regexp in SQL?

Значи, за втория въпрос определено ти трябват някакъв вид регулярни изрази...Та въпросът ми е има ли изобщо такова нещо вградено в SQL?

Математиката се състои от очевидни неща подредени по подходящ начин.
Отговор
в отговор на Dakota #6

Re: regexp in SQL?

Има.
RLIKE примерно

Обаче!!!
Много е важно да помниш, че те никога по никакъв начин не могат да използват Индекс.
А това може да доведе до страхотно забавяне. 10, 100, 1000 пъти по-бавно - няма горна граница.
Сметката е проста - ако имаш таблица със 1 000 000 реда а искаш до извадиш около 10 ако select-а ти използва индекс ще обработиш 10 реда иначе ....

Това важи не само за RLIKE а и за доста други функции.
Примерно LIKE 'a%' - може да използва Индекс а LIKE '%a' - не може
Ето нещо от моята практика (напоследък ми се наложи):
select count(*) from tbl;
441463

select count(*) from tbl where name like 'neshto%';
| 515 |
+----------+
1 row in set (0.03 sec)
select count(*) from tbl where name like '%neshtodrugo';
| 1096 |
+----------+
1 row in set (2.97 sec)

Колко пъти е разликата?

Linux is like a wigwam - No Windows, No Gates, Apache inside
Отговор
в отговор на Lizard #7

Re: 2 питания

MySQL-a ima edna takava function REGEXP - vij dali nqma da moje da ti svyrshi rabota da updadesh vsichko bez da se nalaga da go podmenqsh v php coda

Отговор
в отговор на Lizard #8

Probai neshto takova

Priemam che iskash pyrvite 4 simvola da gi zapazish, kakto i posednite 4:

update table_name set field_name=concat(FELT(field_name,2),"kyp",RIGHT(field_name,2)) where field_name REGEXP "^xxxx.+zzzz$";

tova sha ti mache vsichki deto otgovarqt na toq regexp, mojesh da polzvash v sluchaq i LIKE ili kakvot tam se setish drygo,

LEFT e kato substr v php to: substr("neshto",0,2)
RIGHT syshtoto ot kraq na stringa

Отговор
в отговор на Lizard #9

moje i taka :)

za vtoroto pitane - probvai

update table set field=replace(field,'neshto','drugo') where field like '%neshto%'

bi triabvalo da zameni samo stringa neshto sas drugo


:)
uspeh

anyone but me

Редактирано от anyone на

Отговор