Как найти положение символа в столбце SQLite? - PullRequest
9 голосов
/ 09 августа 2011

Если результат "joe@stackoverflow.com" и я хочу найти положение символа @ (3). Является ли это возможным? Похоже, что SQLite не имеет эквивалента INSTR, LOCATE, POSITION или любой такой функции.

SELECT ?('joe@stackoverflow.com')

Обновление В итоге я зарегистрировал пользовательскую функцию расширения, но был удивлен, что мне пришлось это сделать.

Ответы [ 7 ]

11 голосов
/ 27 мая 2014

Получить имя файла из пути:

select replace(path, rtrim(path, replace(path, '/', '' ) ), '') from example;

Получено от http://community.spiceworks.com/topic/38836-sqlite-question-how-do-i-find-the-position-of-a-character-in-a-string?page=2, надеюсь, что это может кому-то помочь.

8 голосов
/ 19 января 2015

Не знаю, является ли это недавним добавлением, но функция INSTR действительно найдет 1-й экземпляр.

2 голосов
/ 08 января 2014

Как видите здесь , charindex не входит в стандартный пакет SQLite (по крайней мере, в версии 3.6.2, которую я использую). Но это расширение (extension-functions.c) имеет Charindex, который в основном совпадает с VB instr.

Чтобы добавить эти функции в sqlite:

Мы должны скомпилировать исходный код C, чтобы создать расширение sqlite (при условии, что вы в Windows):

  • Установите компилятор mingw , небольшой и простой в использовании.

  • скопировать sqlite3.h в ту же папку

  • gcc -fPIC -lm -shared extension-functions.c -o libsqlitefunctions.dll

  • fireup sqlite

  • выберите load_extension ('libsqlitefunctions.dll')

Есть и другие строковые и математические функции.

2 голосов
/ 16 октября 2012

Получено из публикации spiceworks :

Первый шаг - удалить всех персонажей, вплоть до определенного персонажа, используя ltrim или rtrim.Если вы извлекаете имя файла, вы обрезаете все символы, которые не являются косыми чертами.Если вы получаете имя пользователя, то вы обрезаете все, что не является символом @.Затем вы можете использовать эту обрезанную строку в функции замены, чтобы заменить ее вхождение пустой строкой.Это обеспечит вас каждым персонажем, которого вы только что обрезали на первом шаге.Другими словами, имя пользователя или имя файла.

create table example (path varchar(256), email varchar(128));

insert into example values ('/path/to/file1.txt', 'user@domain.com');

Получить пользователя из электронной почты:

select replace(email, ltrim(email, '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM!#$%^&*()_+-=`~[]\/{}|;:,.<>?'),'') from example;
0 голосов
/ 21 сентября 2012

Использование charindex('c', column, 0)

зависит от версии SQLite.

0 голосов
/ 23 апреля 2012

Положение символа '@' может быть найдено функцией CHARINDEX (MSSQL):

SELECT CHARINDEX('@', 'joe@stackoverflow.com', 0)
0 голосов
/ 09 августа 2011
SELECT 
   email,
   POSITION('@' IN email)
From
   table

Вот основной ресурс, который вам может понравиться: http://sqlzoo.net/howto/source/z.dir/tip238311/sqlite

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...