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

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

Аналог (функция charindex) есть в расширении
functions.c Можно скомпилировать эскулайт с этим расширением или загрузить его в эскулайт.
...
Рейтинг: 0 / 0
23.08.2011, 14:47
    #37407952
economistalex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция INSTR('строка', 'ока', [начало]) = 4. Как реализовать ее в sqlite3.dll и exe?
Instr дает позицию подстроки, обычно двух Instr и одного Substr достаточно для "выковыривания" любой полезной информации из текстовых комментариев симпатичных, но очень нестабильных по формулировкам бухгалтерш...
...
MBG, а нет готового скомпилированного SQLite с functions.c - хочется проверить скорость работы функции charindex? Загружать расширения не умею...
...
Рейтинг: 0 / 0
25.08.2011, 00:22
    #37410774
MBG
MBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция INSTR('строка', 'ока', [начало]) = 4. Как реализовать ее в sqlite3.dll и exe?
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
25.08.2011, 11:41
    #37411272
economistalex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция INSTR('строка', 'ока', [начало]) = 4. Как реализовать ее в sqlite3.dll и exe?
Ответ понял. Еду... (в смысле иду по ссылкам). Python мне по душе, спасибо.
...
Рейтинг: 0 / 0
17.10.2011, 11:33
    #37484754
economistalex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция INSTR('строка', 'ока', [начало]) = 4. Как реализовать ее в sqlite3.dll и exe?
В общем, создал ф-ю регистронезависимого 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
26.07.2012, 15:31
    #37893965
economistalex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция INSTR('строка', 'ока', [начало]) = 4. Как реализовать ее в sqlite3.dll и exe?
Ну а кому все-таки понадобится поиск подстроки в строке - можно поискать в просторах сети
файл 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
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Функция INSTR('строка', 'ока', [начало]) = 4. Как реализовать ее в sqlite3.dll и exe? / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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