我有一个.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]%'
任何帮助都将不胜感激。
答案 0 :(得分: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数据库管理器,它确实增加了对使用正则表达式的支持。
答案 1 :(得分: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语法,更容易阅读。
答案 2 :(得分:0)
您到底想要用data.data1 like '%[0-9]%'
完成什么?您是否只想显示字段data.data1
包含一个或多个数字的记录?
我认为有两种方法可以做到:
(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%')
,这很脏而且很慢;
(data.data1 REGEXP '[0-9]+')
。但是,由于SQLite do not include a built-in RegEx engine的默认发行版,您必须自己添加该函数(或使用提供一个函数的库或实用程序)。
否则,您必须通过除使用SQL之外的其他方式执行过滤。