【问题标题】:SQLite: How to extract only numbers and special characters from column?SQLite:如何从列中仅提取数字和特殊字符?
【发布时间】:2019-01-14 16:23:55
【问题描述】:

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

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

字符串:

Rue des cocotiers, 9/11  

结果:

9/11

谢谢

【问题讨论】:

  • 类似的事情在进行查询的程序中更容易完成。

标签: sql sqlite


【解决方案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 中运行以下命令后 提到的命令已经运行并创建了一个文件 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 2022-01-25
    • 2021-04-26
    相关资源
    最近更新 更多