powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Функция INSTR('строка', 'ока', [начало]) = 4. Как реализовать ее в sqlite3.dll и exe?
7 сообщений из 7, страница 1 из 1
Функция INSTR('строка', 'ока', [начало]) = 4. Как реализовать ее в sqlite3.dll и exe?
    #37407735
economistalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не знаю почему ее нет в core-функциях, но без нее не обойтись при работе с бух. данными с "нечеткими" подстроками. А заменить нечем (не городить же кучу LIKE-ов по подстрокам?)
...
В SQLite Manager для FireFox есть функционал с пользовательскими функциями (хранятся отдельно - в smFunctions.sqlite), однако как его задействовать - непонятно.
...
Рейтинг: 0 / 0
Функция INSTR('строка', 'ока', [начало]) = 4. Как реализовать ее в sqlite3.dll и exe?
    #37407855
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
economistalex,

Чем куча LIKE отличается от кучи INSTR?..

Аналог (функция charindex) есть в расширении
functions.c Можно скомпилировать эскулайт с этим расширением или загрузить его в эскулайт.
...
Рейтинг: 0 / 0
Функция INSTR('строка', 'ока', [начало]) = 4. Как реализовать ее в sqlite3.dll и exe?
    #37407952
economistalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Instr дает позицию подстроки, обычно двух Instr и одного Substr достаточно для "выковыривания" любой полезной информации из текстовых комментариев симпатичных, но очень нестабильных по формулировкам бухгалтерш...
...
MBG, а нет готового скомпилированного SQLite с functions.c - хочется проверить скорость работы функции charindex? Загружать расширения не умею...
...
Рейтинг: 0 / 0
Функция INSTR('строка', 'ока', [начало]) = 4. Как реализовать ее в sqlite3.dll и exe?
    #37410774
MBG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBG
Гость
economistalexInstr дает позицию подстроки, обычно двух Instr и одного Substr достаточно для "выковыривания" любой полезной информации из текстовых комментариев симпатичных, но очень нестабильных по формулировкам бухгалтерш...

Регекспы намного удобнее в такой ситуации (пример на Tcl):

Код: plaintext
1.
2.
3.
tclsh8. 5  [~]lindex [regexp -inline -nocase {.*(Катя.*)\s*.*} "ягода малина, катя-катерина"]  1 
катя-катерина
tclsh8. 5  [~]lindex [regexp -inline -nocase {.*(Катя.*)\s*.*} "ягода малина, катя катерина"]  1 
катя катерина

Можно найти расширения с поддержкой поиска по регекспу:

http://www.mailinglistarchive.com/html/sqlite-dev@sqlite.org/2010-08/msg00000.html]http://www.mailinglistarchive.com/html/sqlite-dev@sqlite.org/2010-08/msg00000.html

https://github.com/eatnumber1/sqlite-regexp

Если же нужно извлекать подстроки, несложно, к примеру, тиклевый интерпретатор использовать:
http://sqlite.mobigroup.ru/wiki?name=ext_tcl

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
sqlite> .load /usr/lib/libsqlitetcl.so

sqlite> SELECT TCLCMD('regexp', '-inline', '-nocase', '.*(Катя.*)\s*.*', 'ягода малина, катя-катерина');
{ягода малина, катя-катерина} катя-катерина

sqlite> SELECT TCLCMD('lindex',TCLCMD('regexp', '-inline', '-nocase', '.*(Катя.*)\s*.*', 
'ягода малина, катя-катерина'),  1 );
катя-катерина

Добавьте свою команду для извлечения нужной части фразы, если есть желание сделать SQL запросы короче. Если хотите, замените тикль на другой язык, некоторое время назад в рассылке sqlite-users пробегали расширения на питоне.

economistalexMBG, а нет готового скомпилированного SQLite с functions.c - хочется проверить скорость работы функции charindex?

Скомпилировать - секундное дело, в файле по ссылке есть нужная команда. Под линукс могу сделать, а других ОС у меня нет.

economistalexЗагружать расширения не умею...

http://www.sqlite.org/lang_corefunc.html#load_extension
...
Рейтинг: 0 / 0
Функция INSTR('строка', 'ока', [начало]) = 4. Как реализовать ее в sqlite3.dll и exe?
    #37411272
economistalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ответ понял. Еду... (в смысле иду по ссылкам). Python мне по душе, спасибо.
...
Рейтинг: 0 / 0
Функция INSTR('строка', 'ока', [начало]) = 4. Как реализовать ее в sqlite3.dll и exe?
    #37484754
economistalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем, создал ф-ю регистронезависимого INSTR средствами FireFox - Plugin "SQLite Manager" - ч/з кнопку f(x) (она создается на JavaScript и хранится в отдельной sqlte-базе в папке для UDF). Ф-я имеет два аргумента и работает так: INSTR('строка', 'ока') = 4. Естественно она работает только в FireFox, но это и требовалось т.к. движок sqlite внутри мозиллы не позволяет загружать расширения. Сама функция:

var pos = 0;
var gde = new String(aValues.getString(0)).toLowerCase();
var chto = new String(aValues.getString(1)).toLowerCase();
pos=gde.indexOf(chto)+1;
return pos;
...
Рейтинг: 0 / 0
Функция INSTR('строка', 'ока', [начало]) = 4. Как реализовать ее в sqlite3.dll и exe?
    #37893965
economistalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну а кому все-таки понадобится поиск подстроки в строке - можно поискать в просторах сети
файл sqlite3_mod_extfunc.dll и загрузить его (при использовании sqlite3odbc - просто указав в DSN-строке или в сво-вах ODBC.

Dll-ка добавит функции

Математические: acos, asin, atan, atn2, atan2, acosh, asinh, atanh, difference, degrees, radians, cos, sin, tan, cot, cosh, sinh, tanh, coth, exp, log, log10, power, sign, sqrt, square, ceil, floor, pi.

Строковые: replicate, charindex, leftstr, rightstr, ltrim, rtrim, trim, replace, reverse, proper, padl, padr, padc, strfilter
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Функция INSTR('строка', 'ока', [начало]) = 4. Как реализовать ее в sqlite3.dll и exe?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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