SQL仅返回包含数字的文本

时间:2012-12-19 22:41:27

标签: sql sqlite

我有一个.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]%'

任何帮助都将不胜感激。

3 个答案:

答案 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包含一个或多个数字的记录?

我认为有两种方法可以做到:

  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 do not include a built-in RegEx engine的默认发行版,您必须自己添加该函数(或使用提供一个函数的库或实用程序)。

  3. 否则,您必须通过除使用SQL之外的其他方式执行过滤。

相关问题