SQLite:如何仅从列中提取数字和特殊字符?

时间:2019-01-14 16:23:55

标签: sql sqlite

我尝试提取字符串中的数字和特殊字符,如何在SQL中做到这一点? (SQLite)

使用FORMAT()有办法吗?用REPLACE()?
我搜索[@ $!%*?&/]和[0-9]数字...

字符串:

Rue des cocotiers, 9/11  

结果:

9/11

谢谢

1 个答案:

答案 0 :(得分:1)

这通常是一个正则表达式解决方案,但是尽管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 runn下面的命令中   提到的命令已运行并创建文件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;