0

我有一个.db文件,其中包含来自 android 手机的联系人列表。我已经加入了两个表格,以在联系人旁边显示手机号码。但我试图显示只包含手机号码的记录。但是当我运行 SQL 语句时,它不会返回一个表。您需要记住一些已保存的电话号码以 +44 开头,而其他电话号码以 0 开头。

这是我的 SQL 语句:

select contacts.display_name, data.data1 as Phone_Number,
    contacts.times_contacted, contacts.last_time_contacted 
from contacts, data 
where contacts._id = data.raw_contact_id and data.data1 like '%[0-9]%'

任何帮助,将不胜感激。

4

3 回答 3

0

在 SQL 中使用正则表达式的关键字是 REGEXP。以下查询应显示“data.data1”包含数字的任何行。

SELECT contacts.display_name, data.data1 AS Phone_Number,
    contacts.times_contacted, contacts.last_time_contacted 
FROM contacts, data 
WHERE contacts._id = data.raw_contact_id AND data.data1 REGEXP "[0-9]"

编辑:正如我所说的那样。默认情况下,SQLite 似乎不支持正则表达式。它要求用户创建一个名为 regexp() 的函数来定义它应该如何完成。您使用的程序似乎没有为您创建功能。

SQLiteSpy似乎是另一个 GUI 数据库管理器,它确实增加了对使用正则表达式的支持。

于 2012-12-19T23:02:51.960 回答
0
SELECT cc.display_name, dd.data1 as Phone_Number
    , cc.times_contacted, cc.last_time_contacted 
FROM contacts cc
JOIN data dd ON cc._id = dd.raw_contact_id
WHERE (dd.data1 like '+44[0-9]%'
       OR dd.data1 like '0[0-9]%'
       )
     ;

注意:我转换成 JOIN 语法,这样更容易阅读。

于 2012-12-19T23:31:04.390 回答
0

你到底想用什么来完成data.data1 like '%[0-9]%'?您是否只想显示字段data.data1包含一位或多位数字的记录?

我看到了两种方法:

  1. (data.data1 LIKE '%0%' OR data.data1 LIKE '%1%' OR data.data1 LIKE '%2%' OR data.data1 LIKE '%3%' OR data.data1 LIKE '%4%' OR data.data1 LIKE '%5%' OR data.data1 LIKE '%6%' OR data.data1 LIKE '%7%' OR data.data1 LIKE '%8%' OR data.data1 LIKE '%9%'), 丑陋且相当缓慢;

  2. (data.data1 REGEXP '[0-9]+'). 但是,由于 SQLite 的默认发行版不包含内置的 RegEx 引擎,因此您必须自己添加该功能(或使用提供该功能的库或实用程序)。

否则,您将不得不使用 SQL 以外的其他方式执行过滤。

于 2012-12-20T17:20:20.540 回答