powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / instr
5 сообщений из 5, страница 1 из 1
instr
    #33164900
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ф-ия instr работает как попало

итак, сегодня у нас четверг :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
mysql> select substr(dayname(now()), 1 , 3 );
+----------------------------+
| substr(dayname(now()), 1 , 3 ) |
+----------------------------+
| Thu                        |
+----------------------------+
 1  row in set ( 0 . 00  sec)

Проверим работу instr
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
mysql> select instr('Thu',substr(dayname(now()), 1 , 3 )) flag;
+------+
| flag |
+------+
|     1  |
+------+
 1  row in set ( 0 . 00  sec)
верно, вхождение есть

а так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
mysql> select instr('thu',substr(dayname(now()), 1 , 3 )) flag;
+------+
| flag |
+------+
|     0  |
+------+
 1  row in set ( 0 . 00  sec)
тоже верно, т.к. thu с маленькой буквы и неравно Thu

чтож проверим это еще и влоб
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select instr('thu','Thu');
+--------------------+
| instr('thu','Thu') |
+--------------------+
|                   1  |
+--------------------+
 1  row in set ( 0 . 00  sec)

хе! почему?

также идет игнорирование регистра если 1-ый аргумент instr - поле таблички
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
mysql> create table t1 ( days varchar( 3 ) );
Query OK,  0  rows affected ( 0 . 17  sec)

mysql> insert into t1 values('thu');
Query OK,  1  row affected ( 0 . 00  sec)

mysql> select instr(days,substr(dayname(now()), 1 , 3 )) from t1;
+----------------------------------------+
| instr(days,substr(dayname(now()), 1 , 3 )) |
+----------------------------------------+
|                                       1  |
+----------------------------------------+
 1  row in set ( 0 . 00  sec)

как то непонятно
...
Рейтинг: 0 / 0
instr
    #33165126
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dev.mysql.com
INSTR(str,substr)

Returns the position of the first occurrence of substring substr in string str. This is the same as the two-argument form of LOCATE(), except that the arguments are swapped.

mysql> SELECT INSTR('foobarbar', 'bar');
-> 4
mysql> SELECT INSTR('xbar', 'foobar');
-> 0

This function is multi-byte safe. In MySQL 3.23, this function is case sensitive. For 4.0 on, it is case sensitive only if either argument is a binary string.
...
Рейтинг: 0 / 0
instr
    #33165141
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хороший вопрос, возможно это связано с кодировкой таблицы или базы в целом, с типом полей и с настройками самого сервера, как по отдельности так и всего вместе!

Пока ничего более внятного в документации не нашео :(

Код: plaintext
mahoune
...
Рейтинг: 0 / 0
instr
    #33165470
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, DocAl прав, если что неполучается бери читать документацию :)

по русски там звучит так
Код: plaintext
1.
2.
В MySQL 3.23 эта функция чувствительна к регистру, а в 4.0 она чувствительна 
к регистру только в случае, если хотя бы один из аргументов является строкой с двоичными данными. 

А у меня 5-ый.
А что значит строка с двоичными данными и как тогда?

Так если пользоваться ф-иями привидения типов и переконвертить один из аргументов instr-а из симв. в бинарный тип , то все работает как надо

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
mysql> select instr(days,cast(substr(dayname(now()), 1 , 3 ) as binary)) flag from t1;
+------+
| flag |
+------+
|     0  |
+------+
 1  row in set ( 0 . 00  sec)
mysql> select instr(cast('thu' as binary),'Thu') flag;
+------+
| flag |
+------+
|     0  |
+------+
 1  row in set ( 0 . 00  sec)

И нафига такое нужно , если мне нужно убрать case sensitive я возьму ф-ии ucase или lcase ( по кр. мере в оракле так ..
...
Рейтинг: 0 / 0
instr
    #33165533
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не, что то я всеравно невъехал

из запроса
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
mysql> desc t1;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| days  | char( 3 ) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
 1  row in set ( 0 . 01  sec)

mysql> select days,instr(days,substr(dayname(now()), 1 , 3 )) flag from t1;
+------+------+
| days | flag |
+------+------+
| thu  |     1  |
+------+------+
 1  row in set ( 0 . 00  sec)


мы заключаем, что ни столбец days ни выр. substr(dayname(now()),1,3) не имеет бинарный тип

из запроса
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
mysql> select instr('thu','Thu') flag;
+------+
| flag |
+------+
|     1  |
+------+
 1  row in set ( 0 . 00  sec)

мы заключаем что 'thu' тоже симв.

однако запрос
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
mysql> select instr('thu',substr(dayname(now()), 1 , 3 )) flag;
+------+
| flag |
+------+
|     0  |
+------+
 1  row in set ( 0 . 00  sec)

дает нам рез-т с учетом регистра несмотря на то что нигде нет binary

бред?
или это я тормажу?
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / instr
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]