[英]How do I find the position of a character in a SQLite column?
如果結果“ joe@stackoverflow.com
”,我想找到@
符號的位置(3)。 是否有可能? SQLite 似乎沒有等效於INSTR
、 LOCATE
、 POSITION
或任何此類功能。
SELECT ?('joe@stackoverflow.com')
更新我最終注冊了一個自定義擴展功能,但很驚訝我必須這樣做。
從路徑中檢索文件名:
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 ,希望它可以幫助某人。
不知道這是否是最近添加的,但是INSTR
函數確實會找到第一個實例。
從表中選擇指令(列,'@')
從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;
正如您在此處看到的,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
啟動sqlite
選擇 load_extension('libsqlitefunctions.dll')
還有其他字符串和數學函數。
使用charindex('c', column, 0)
這取決於 SQLite 的版本。
我正在使用 Python,但這可以使用命令行工具來完成。
此解決方案使用正則表達式來提取日期:
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}');
SELECT
email,
POSITION('@' IN email)
From
table
這是您可能喜歡的基本資源: http : //sqlzoo.net/howto/source/z.dir/tip238311/sqlite
字符 '@' 的位置可以通過函數 CHARINDEX (MSSQL) 找到:
SELECT CHARINDEX('@', 'joe@stackoverflow.com', 0)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.