【发布时间】:2019-01-14 16:23:55
【问题描述】:
我尝试提取字符串中的数字和特殊字符,如何在 SQL 中做到这一点? (SQLite)
FORMAT() 有什么办法吗?使用 REPLACE()?
我搜索 [@$!%*?&/] 和 [0-9] 数字...
字符串:
Rue des cocotiers, 9/11
结果:
9/11
谢谢
【问题讨论】:
-
类似的事情在进行查询的程序中更容易完成。
我尝试提取字符串中的数字和特殊字符,如何在 SQL 中做到这一点? (SQLite)
FORMAT() 有什么办法吗?使用 REPLACE()?
我搜索 [@$!%*?&/] 和 [0-9] 数字...
字符串:
Rue des cocotiers, 9/11
结果:
9/11
谢谢
【问题讨论】:
这通常是一个正则表达式解决方案,但是虽然 sqlite 现在能够在 WHERE 子句中运行 REGEXP 表达式,但它还没有实现在更全面的 SQL 实现中发现的标准 regexp_replace 函数。
How to use REGEXP in SQLite3 to extract matched string (as a column value)
要运行这样的表达式:
SELECT trim(regexp_replace(threeload.title, '\b([\d*#+\/]+)\b')) str
FROM threeload
WHERE threeload.title REGEXP '\b([\d*#+\/]+)\b';
您首先需要使用附加功能重新编译 sqlite,可能类似于此答案中概述的功能:
https://stackoverflow.com/a/44586265/10890850
如果它被删除,以下是步骤(不是我的回答,请给原始回复投票):
Sqlite 默认不提供 regex_replace 功能。你 需要将其作为扩展加载。这是我设法做到的。
Download this C code for the extension (icu_replace)
编译使用
gcc --shared -fPIC -I sqlite-autoconf-3071100 icu_replace.c -o icu_replace.so并且在 sqlite3 中运行以下命令后 提到的命令已经运行并创建了一个文件 icu_replace.so
SELECT load_extension(' path to icu_replace.so', 'sqlite3_extension_init') from dual;在此之后,您将能够使用以下功能:-
select regex_replace('\bThe\b',x,'M') from dual;
【讨论】: