¿Cómo encuentro la position de un personaje en una columna de SQLite?

Si el resultado es " joe@stackoverflow.com " y quiero encontrar la position del símbolo @ (3). ¿Es posible? No parece que SQLite tenga el equivalente de INSTR , LOCATE , POSITION o cualquier function de este tipo.

 SELECT ?('joe@stackoverflow.com') 

Actualización Terminé registrando una function de extensión personalizada, pero me sorprendió que tuviera que hacerlo.

Recuperar nombre de file de una ruta:

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

Obtenido de http://community.spiceworks.com/topic/38836-sqlite-question-how-do-i-find-the-position-of-a-character-in-a-string?page=2 , lo espero podría ayudar a alguien

No sé si esta es una adición reciente, pero la function INSTR encontrará la primera instancia.

Como puede ver aquí , charindex no está en el package estándar de SQLite (al less en la versión 3.6.2 que uso). Pero esta extensión (extension-functions.c) tiene Charindex, que es básicamente lo mismo que el instr. VB.

Para agregar estas funciones a sqlite:

Tenemos que comstackr el código fuente C para hacer la extensión sqlite (asumiendo que está en Windows):

  • Instale el comstackdor mingw , pequeño y fácil de hacer.

  • copy sqlite3.h a la misma carpeta

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

  • fireup sqlite

  • select load_extension ('libsqlitefunctions.dll')

También hay otras funciones de string y matemáticas.

Obtuve esto de una publicación de spiceworks :

El primer paso es eliminar todos los caracteres hasta un carácter específico usando ltrim o rtrim. Si está recuperando un nombre de file, recorte todos los caracteres que no sean barras diagonales. Si está recuperando un nombre de usuario, recorte todo lo que no sea un carácter @. Luego puede usar esa string recortada en una function de reemploop para replace su aparición con una cadena vacía. Eso le proporcionará todos los personajes que acaba de recortar en el primer paso. En otras palabras, el nombre de usuario o el nombre del file.

 create table example (path varchar(256), email varchar(128)); insert into example values ('/path/to/file1.txt', 'user@domain.com'); 

Recuperar usuario de correo electrónico:

 select replace(email, ltrim(email, '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM!#$%^&*()_+-=`~[]\/{}|;:,.<>?'),'') from example; 

Use charindex('c', column, 0)

depende de la versión de SQLite.

 SELECT email, POSITION('@' IN email) From table 

Aquí hay un recurso básico que te puede gustar: http://sqlzoo.net/howto/source/z.dir/tip238311/sqlite

La position de char '@' se puede encontrar mediante la function CHARINDEX (MSSQL):

 SELECT CHARINDEX('@', 'joe@stackoverflow.com', 0)