如果结果为“joe@stackoverflow.com
”,我想找到@
符号(3)的位置。可能吗? SQLite似乎没有INSTR
,LOCATE
,POSITION
或任何此类函数的等价物。
SELECT ?('joe@stackoverflow.com')
更新我最终注册了自定义扩展功能,但我不得不感到惊讶。
答案 0 :(得分:11)
从路径中检索文件名:
select replace(path, rtrim(path, replace(path, '/', '' ) ), '') from example;
答案 1 :(得分:8)
不知道这是否是最近添加的,但INSTR
function确实会找到第一个实例。
答案 2 :(得分:2)
第一步是删除特定字符的所有字符 使用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)