SOQL 查询 - 如何通过将字段设为小写并进行比较来编写 SOQL 查询?

SOQL Query - How to write a SOQL query by making a field to lowercase and compare?

以下查询 returns 出现错误:

查询:

SELECT Id, FirstName, LastName, OwnerId, PersonEmail
FROM Account 
WHERE lower(PersonEmail) = lower('abc.DEF@org.cOM')

API 响应:

success: false
    result: Dictionary
    error: IntegrationError
        title: "The JSON body contains an error"
        message: "Salesforce returned the following error code: MALFORMED_QUERY"
        detail: "
'%test%' and lower(PersonEmail) = lower('abc.DEF@org.cOM')
                                 ^
ERROR at Row:4:Column:54
Bind variables only allowed in Apex code"

我们不能在 SOQL 中使用 SQL 函数吗?

not 需要将文本更改为小写:

Comparisons on strings are case-sensitive for unique case-sensitive fields and case-insensitive for all other fields

编辑:换句话说,只有 specific 字段被唯一标记为区分大小写。其余的不是。此外,默认情况下,电子邮件存储为全部小写。另外,尝试 LIKE 比较,(我相信)即使对于区分大小写的字段也是不区分大小写的。

Can't we use SQL functions in SOQL?

不,你不能。 SOQL 是 Salesforce 特定的方言。这是您可以使用的一个不错的列表:https://salesforce.stackexchange.com/questions/166372/all-functions-available-in-soql。您所做的任何比较都必须采用 field operator value 风格。您不能将字段值与另一个字段的值进行比较(除了主键/外键……您可以为此编写公式)。而且你不能做“聪明”的奇怪查询 WHERE 1=1 AND...

这与其他 SQL 方言真的没有太大区别吗?对我来说 SQL 服务器的日期格式“112”与你缺少 LOWER 同样奇怪。如果你真的想在 UI 中有一个小写值 returned/displayed 你可以在 SF 中创建一个公式字段(有点像在实体化视图中添加一列?) - 但它的比较仍然不区分大小写并且可能更慢,完全 table 搜索到 运行 最终无用的函数而不是使用索引。

SOQL 在数据库级别不区分大小写(我相信这叫做排序规则?)。您所做的任何选择都会 return 忽略大小写,因此您不必显式调用 LOWER() 这有一些例外,但 PersonEmail 不是其中之一:

  • 如果您将自定义字段标记为区分大小写(您可以要求管理员构建一个自动化功能,将 PersonEmail 中的值复制到此类自定义字段,但我认为没有意义)
  • 如果您使用平台加密(a.k.a。Salesforce Shield)并使用带有区分大小写选项的确定性加密方法。