Salesforce SQL查询如何正确匹配含撇号的姓氏(如O'Brien)
Salesforce SOQL 带撇号姓氏筛选写法修正
你当前的查询存在3个核心问题:
- 转义规则用错:
%27是URL场景下的单引号编码,在SOQL语句内部无效。SOQL对字符串内单引号的转义规则是连续写两个单引号,例如要匹配O'Brien,字符串值要写为'O''Brien'。 - 条件逻辑优先级错误:SOQL中
AND的运算优先级高于OR,你当前写法里最后一个OR条件会绕过前面所有的团队、状态筛选规则,只要姓氏匹配错误规则就会返回结果,和预期筛选逻辑完全不符。 - 匹配值写了无效字符:条件里的
"是HTML转义的双引号,属于多余无效内容,无法匹配到目标数据。
如果你的筛选需求是:Comp_id为1234、成员状态为Active Member、机会状态为Active,且姓氏要么以Test开头、要么包含撇号(即O'Brien这类带单引号的姓氏),修正后的正确语句如下:
SELECT o.Id ,Member_RecordHidden__r.Member_ID__c ,Member_RecordHidden__r.FirstName ,Member_RecordHidden__r.LastName ,Member_RecordHidden__r.Date_of_birth__c ,Member_RecordHidden__r.Gender__c ,Member_RecordHidden__r.Member_Status__c ,Team_Name__c ,Team__c ,Last_Visit_Date__c ,Status__c FROM Opportunity o WHERE Team__r.Comp_id__c = '1234' AND Member_RecordHidden__r.Member_Status__c = 'Active Member' AND Status__c = 'Active' AND ( Member_RecordHidden__r.LastName LIKE 'Test%' OR Member_RecordHidden__r.LastName LIKE '%''%' )
补充说明:
如果你不需要匹配所有带撇号的姓氏,只需要精确匹配O'Brien这类特定值,直接把对应条件改为
Member_RecordHidden__r.LastName = 'O''Brien'即可。单值等值判断用=比IN执行效率更高,原语句SELECT子句中Team_Name__c, Team__c前多余的逗号已经移除,符合SOQL书写规范。
内容的提问来源于stack exchange,提问作者lorr81
相关产品推荐
相关产品推荐

