Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

Apex で使用する場合に SOQL で LIKE を使用して、特殊文字をエスケープする

公開日: Oct 13, 2022
説明

SOQL でアンダースコアなどの予約文字を含む検索用語と一致させるために LIKE を使用する場合、Apex コードで、期待する結果を得るには、追加の手順を実行する必要があります。 
 

@isTest 
private static void testWithoutAssignment() 
{ 
    insert new account(name='namea'); 
    insert new account(name='name_a'); 
    insert new account(name='name_b');

    List<Account> a = [SELECT Name From Account Where Name like '%\\_a'];
    system.debug(a);
    system.assertEquals(1,a.size());  // fails
}


このテストはアンダースコア文字をエスケープしています。これが成功して、1 つの行「name_a」と一致することを期待しますが、一致しません。 

解決策

アンダースコア文字があるために、通常のエスケープ方法の使用が機能しない場合、検索用語を変数に代入して、SOQL クエリで変数を使用することで、LIKE ステートメントが正しい値に一致するようになります。 
 

@isTest 
private static void testWithAssignment() 
{ 
    insert new account(name='namea'); 
    insert new account(name='name_a'); 
    insert new account(name='name_b'); 

    String searchTerm = '%\\_a';  // assign the search term to a variable

    List<Account> a = [SELECT Name From Account Where Name like :searchTerm]; 
    system.debug(a); 
    system.assertEquals(1,a.size());  // success
}
ナレッジ記事番号

000382866

 
読み込み中
Salesforce Help | Article