ver.2サポートサイト

HOME機能その他条件式によるレコード検索

条件式によるレコード検索

・APIのクエリパラメータwhere

・一斉メール配信作成画面の「抽出条件(高度)」

などでは、直接条件式を記述することでレコードの検索条件を指定できます。

検索条件の指定方法

フィールドの識別子またはフィールドタイプの書式

フィールドの識別子やフィールドタイプの値を条件式に使用する場合、それぞれ以下の表に従って記載する必要があります。

※一部のフィールドタイプはSPIRAL ver.2の独自関数を使用し、検索したい値をフィールドタイプの形式に変換する必要があります。

識別子またはフィールドタイプ 使用例 説明
name(識別子) @_id
@email
nameの先頭に@をつけます。
text型 '山田 太郎'
'I''m Yamada Taro'
シングルクォートで囲みます。
文字列にシングルクォートを含める場合は
シングルクォートを連続させてエスケープする必要があります。
email型 'email@example.com' シングルクォートで囲みます。
phone型 '+81 80-1111-2222'
PHONE('080-1111-2222')
シングルクォートで囲む場合はE164フォーマットで指定します。
PHONE関数を用いることで、一般的な電話番号の形式の入力も可能です。
integer型 100
-100
INTEGER('100')
シングルクォートで囲まずにそのまま入力できます。
INTEGER関数を用いることで、文字列を整数に変換することも可能です。
double型 100.123
-100.123
シングルクォートで囲まずにそのまま入力できます。
date型 '2017-01-01'
DATE('2017-01-01')
NOW()

シングルクォートで囲みます。
DATE関数を用いることで、文字列を日付に変換することも可能です。
NOW関数を用いることで、現在日時を取得することが出来ます。

※年-月-日(ハイフン区切り年月日順)のフォーマットで記載してください。

※1桁の場合0は省略可能です。

dateTime型 '2017-01-01T21:00:00+09:00'

シングルクォートで囲みます。

monthDay型 MONTH_DAY('01-01')

MONTH_DAY関数を用いて文字列を月日に変換する必要があります。

※月-日(ハイフン区切り月日順)のフォーマットで記載してください。

※1桁の場合0は省略可能です。

time型 '12:00:00' text型と同様シングルクォートで囲みます。
select型 10 シングルクォートで囲まずにそのまま入力できます。
multiselect 型 MULTISELECT('0','1')

MULTISELECT関数を用いて文字列をマルチセレクトに変換する必要があります。

('0','1')はラベルではなくIDを指定してください。

演算子の書式

演算子は以下を指定できます。

演算子 説明 使用例
= 一致 @name = '山田 太郎'
<> 不一致 @name <> '山田 太郎'
< 未満 @age < 10
<= 以下 @age <= 10
> 超過 @age > 10
>= 以上 @age >= 10
+ 加算 @age > @integer + 10
- 減算 @age > @integer - 10
* 乗算 @price > @integer * 10
/ 除算 @price > @integer / 10
% 剰余算 @price = @integer % 10
IS NULL NULL検索 @email IS NULL
IS NOT NULL NULL以外の検索 @email IS NOT NULL
IN 指定したリストとの比較 @name IN ('山田 太郎', '田中 花子', '佐藤 一郎')
LIKE 文字列パターンのマッチング(大文字小文字区別)。
ワイルドカードは、%、_
%:任意の0文字以上の文字列
_:任意の1文字
@name LIKE '%Taro'
@name LIKE 'Yamada _aro'
ILIKE 文字列パターンのマッチング(大文字小文字無視)。
ワイルドカードは、%、_
%:任意の0文字以上の文字列
_:任意の1文字

@name ILIKE '%taro'

NOT 否定。INやLIKE、CONTAINSと組み合わせる

@name NOT LIKE = '%太郎'

@name NOT IN ('山田 太郎', '田中 花子')

@status NOT ANYCONTAINS ('1', '2')

@category NOT ALLCONTAINS ('1', '2')

AND 論理積 @age >= 10 AND @name = '山田 太郎'
OR 論理和 @age >= 10 OR @name = '山田 太郎'
ANYCONTAINS

指定の選択肢番号のいずれか含む(セレクト、マルチセレクトフィールドのみ有効)

@status ANYCONTAINS ('1', '2')
ALLCONTAINS 指定の選択肢番号全てが含まれる(マルチセレクトフィールドのみ有効) @category ALLCONTAINS ('1', '2')

条件式の優先順位

1.括弧

複数の演算子を組み合わせる条件式の場合、括弧で括られた条件が優先して扱われます。
括弧がない場合は、演算子間の優先順位に従います。

2.演算子間の優先順位

演算子の優先順位は以下となります。優先順位が同列の場合は左側に記述された条件から処理されます。

順位 演算子
1 * % /
2 + -
3 IS NULL、IS NOT NULL
4 LIKE
5 IN
6 < <= > >=
7 = <>
8 NOT
9 AND
10 OR

(例)【営業部か開発部で、30歳以上】のレコードを検索する場合

【正しい条件式】
(@department = 'sales' OR @department = 'development') AND @age >= 30
 ※ 括弧が優先され、【[営業部か開発部]で30歳以上】を検索します
【誤った条件式】
 @department = 'sales' OR @department = 'development' AND @age >= 30
 ※ 演算子の優先順位に従い、ORよりもANDが優先され、【営業部か[開発部で30歳以上]】を検索します。

SPIRAL ver.2の独自関数

以下の関数を使用することで、細かな条件でレコード抽出を行うことができます。

関数 説明 使用例 備考
NOW() 現在日時を取得 NOW()  
LENGTH(_format) 文字列の長さを取得 LENGTH('おはよう')

バイト数ではなく文字の個数を取得します。

LENGTH('おはよう') は4を返します。

DATE(_format) 文字列を日付に変換 DATE('2014-05-01')  
DATE_TIME(_format) 文字列を日時に変換 DATE_TIME('2014-05-01 12:30:00')
MONTH_DAY(_format) 文字列を月日に変換 MONTH_DAY('05-31') ハイフンは必須。1桁の月・日は0を省略できます。
YEAR(_format) 引数の年の値だけを抽出して取得 YEAR(@dateField)

日付型、日時型のフィールドが引数として使えます。

年の値を整数で返します。

MONTH(_format) 引数の月の値だけを抽出して取得 MONTH(@dateField)

日付型、日時型、月日型のフィールドが引数として使えます。

月の値を整数で返します。

DAY(_format) 引数の日の値だけを抽出して取得 DAY(@dateField)

日付型、日時型、月日型のフィールドが引数として使えます。

日の値を整数で返します。

INTERVAL(_format) 文字列をインターバルに変換 INTERVAL('3 days')

日付、日時、月日型のフィールドと加減演算ができます。

'days'の他にも'hours', 'month'などが使えます。

INTEGER(_format) 文字列を整数に変換 INTEGER('100')  
MULTISELECT(_format) 文字列をマルチセレクトに変換 MULTISELECT('0','1') 引数はラベルではなくIDとなります。
PHONE(_format) 文字列を電話番号に変換 PHONE('080-1111-1111')  
関数を使った検索例
日時が現在よりも前のレコードを検索
@dateTime < NOW()
公開開始日が今日以前を検索
@date <= DATE(NOW())
公開終了日が今日以降を検索
@enddate >= DATE(NOW())
文字数が100字以上のレコードを検索
LENGTH(@text) >= 100
日付が2014年5月1日のレコードを検索
@date = DATE('2014-05-01')
月日が5月1日のレコードを検索
@monthDay = MONTH_DAY('05-01')
月が四月のレコードを検索
MONTH(@date) = 4
予約日がイベントの3日以上前のものを検索
@reserveDate <= @eventDate - INTERVAL('3 days')
セミナー開催日が今日から1ヶ月以上前を検索
@date <= DATE(NOW()) - INTERVAL('1 month')
セミナー開催日が今日から1ヶ月前以降を検索
@date >= DATE(NOW()) - INTERVAL('1 month')
誕生日の月日が今日の月日から30日前以降を検索
@birthday >= DATE(NOW()) - INTERVAL('30 days')
誕生日の月日が今日の月日から30日後以前を検索
@birthday <= DATE(NOW()) + INTERVAL('30 days')
誕生日の月日が、今日から1ヶ月前以降、かつ、誕生日の月日が、今日から1ヶ月後以前を検索
@birthday >= DATE(NOW()) - INTERVAL('1 month') AND @birthday <= DATE(NOW()) + INTERVAL('1 month')
誕生日の月が今日の月と同じものを検索
MONTH(@birthday) = MONTH(NOW())
最終更新日時が今日から過去7日間のものを検索
@_updatedAt >= DATE(NOW()) - INTERVAL('7 days') AND @_updatedAt <= DATE(NOW())
整数値が100のレコードを検索
@integer = INTEGER('100')
この関数を使わなくても同様の検索はできます。:@integer = 100
電話番号が080-1111-1111のものを検索
@phone = PHONE('080-1111-1111')

 

参照フィールドの指定方法

参照フィールドを条件式に使用する場合、それぞれ以下の内容に従って記載する必要があります。

参照フィールドを使った検索例
1レコード参照で、指定した参照先レコードと等しい
@reference = '1'
複数レコード参照で、指定した参照先レコードのいずれかを含む
@reference ANYCONTAINS('2','3')
※{@参照フィールド識別名}の形式で参照フィールドの参照先レコードに対して条件を指定できます。
参照先DB内のセレクトフィールドのラベル値のいずれかを含む
@reference.select ANYCONTAINS('1','2','3')
※{@参照フィールド識別名.参照先DBフィールド識別名}の形式で参照先DB内に含まれるフィールド値に対して条件を指定できます。
  使用できる条件は、参照先DB内に含まれるフィールドのフィールドタイプによって変わります。