0

.dbAndroidフォンの連絡先リストを含むファイルがあります。2 つのテーブルを結合して、連絡先の横に携帯電話番号を表示しました。しかし、携帯電話番号のみを含むレコードを表示しようとしています。しかし、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
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 つ以上の数字が含まれているレコードのみを表示しますか?

それを行うには2つの方法があります。

  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 に答える