如何在SQLite列中找到字符的位置?

时间:2011-08-08 23:43:56

标签: sql sqlite

如果结果为“joe@stackoverflow.com”,我想找到@符号(3)的位置。可能吗? SQLite似乎没有INSTRLOCATEPOSITION或任何此类函数的等价物。

SELECT ?('joe@stackoverflow.com')

更新我最终注册了自定义扩展功能,但我不得不感到惊讶。

9 个答案:

答案 0 :(得分:11)

从路径中检索文件名:

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,希望它可以帮助某人。

答案 1 :(得分:8)

不知道这是否是最近添加的,但INSTR function确实会找到第一个实例。

答案 2 :(得分:2)

来自a spiceworks posting

  

第一步是删除特定字符的所有字符   使用ltrim或rtrim。如果您正在检索文件名,那么您需要修剪   所有不是斜杠的字符。如果您要检索用户名   然后你修剪一些不是@字符的东西。然后你可以使用   在replace函数中修剪字符串以替换它的出现   用空字符串。那会为你提供每一个角色   你只是在第一步修剪。换句话说,用户名或   文件名。

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;

答案 3 :(得分:2)

正如您所见here,charindex不在SQLite标准包中(至少在我使用的3.6.2版本中)。但是this扩展名(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')

还有其他字符串和数学函数。

答案 4 :(得分:2)

从表中选择instr(COLUMN,'@')

答案 5 :(得分:0)

使用charindex('c', column, 0)

这取决于SQLite的版本。

答案 6 :(得分:0)

我正在使用Python,但这可以使用命令行工具来完成。

此解决方案使用Regex提取日期:

import re
import sqlite3

def get_date_from_path(item: str, expr: str):
    return re.search(pattern=expr, string=item).group()

conn = sqlite3.connect(database=r'Name.db')
conn.create_function("GET_DATE_FROM_PATH", 2, get_date_from_path)

SELECT GET_DATE_FROM_PATH('C:\reports\report_20190731.csv', r'[0-9]{8}');

答案 7 :(得分:-1)

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

以下是您可能喜欢的基本资源:http://sqlzoo.net/howto/source/z.dir/tip238311/sqlite

答案 8 :(得分:-8)

char'@'的位置可以通过CHARINDEX(MSSQL)函数找到:

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