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)并使用带有区分大小写选项的确定性加密方法。
以下查询 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)并使用带有区分大小写选项的确定性加密方法。