hachinoBlog

hachinobuのエンジニアライフ

CoreDataのNSPredicateでlike句を使用した時のエスケープシーケンス(追記あり)

CoreDataのNSPredicateで条件を絞り込む時にlike句を使う場合
? → 任意の一文字
アスタリスク(*) → 0文字以上の文字列

として認識されるので、*と?を検索に使いたい場合はエスケープしてあげる必要がある。

2012/08/01追記
エスケープ対象の文字は分かったが\* \?などでエスケープを色々試しても意味がなかった。
なのでlike句でなくmatches句を使用して対応しました。

カラム1 matches[cd] '.*(\?).*'

のようにして見事に?の付く文字の検索に成功。
正規表現なのでエスケープ対象文字が変わる事に注意!

でもエスケープできないってことないと思うんだよなー。
like句でワイルドカード文字の検索方法知っていたら教えてほしいです。

2012/08/01 また追記
わざわざlikeでやらずにcontains[cd]でやれば良いだけだった。
エスケープ対象はシングルクォートとバックスラッシュくらいかな。