簡體   English   中英

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

[英]How do I find the position of a character in a SQLite column?

如果結果“ joe@stackoverflow.com ”,我想找到@符號的位置(3)。 是否有可能? SQLite 似乎沒有等效於INSTRLOCATEPOSITION或任何此類功能。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM