【问题标题】:Is it possible to concat strings in SOQL?是否可以在 SOQL 中连接字符串?
【发布时间】:2010-11-15 10:21:21
【问题描述】:

我读过 2005 年的帖子,有人说 SOQL 不支持字符串连接。

虽然想知道它是否受支持并且有人这样做了。

我正在尝试连接但没有运气:(

下面是尝试使用指定电子邮件查找记录的 APEX 代码。

String myEmail = 'my@email.com';
String foo = 'SELECT emailTo__c, source__c FROM EmailLog__c 
              WHERE source__c = \'' +
              myEmail + '\';

Database.query(foo)

即使记录确实在数据库中,它也不会查询任何内容。调试显示 "row(0)" 表示返回空。

我做 concat 的方式有误吗?

更新

我刚刚找到了一种不必添加单引号的方法。即使对于有查询的字符串,也只需要应用相同的冒号变量。

String foo = DateTime.newInstance(......);

String bar = 'SELECT id FROM SomeObject__c WHERE createdOn__c = :foo';

List<SomeObject__c> result = Database.query(bar);

System.debug(result);

如果 WHERE 子句包含 DateTime,这也是必要的,因为 DateTime 不能用单引号引起来。

【问题讨论】:

    标签: concatenation salesforce apex-code visualforce soql


    【解决方案1】:

    为什么要使用 Database.query()?如果您在括号中使用普通查询,事情会变得更简单和更快

    [SELECT emailTo__c, source__c FROM EmailLog__c WHERE source__c = :myEmail]

    更不用说参数绑定而不是字符串连接意味着无需担心 SQL 注入等。请考虑习惯括号中的这些查询,它们在开始时看起来很奇怪,但会节省很多次(输入错误的字段名称等)。

    至于实际的串联 - 它的工作方式与您描述的一样,我只是不确定是否需要转义撇号。绑定变量是最安全的方法。

    http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_dynamic_soql.htm http://www.salesforce.com/us/developer/docs/api/index_Left.htm#CSHID=sforce_api_calls_soql.htm|StartTopic=Content%2Fsforce_api_calls_soql.htm|SkinName=webhelp

    【讨论】:

    • 一个原因是因为我有 3 个字段,如果用户指定了任何字段,则这些字段(即表列)用于构造查询。例如,如果用户输入“名字”和“姓氏”字段,则查询看起来像 SELECT all FROM fooTable WHERE firstname = $userinput AND lastname = $userinput;
    • 在这种情况下,我只能 concat 'firstname = $userinput AND' 等任何替代方案???
    • 当然你可以绑定多个变量[SELECT Id FROM EmailLog__c WHERE column1 = :input1 AND colum2 = input2]...但是你会提出更奇特的逻辑,不太可读的查询会......所以是的,在你的情况下动态查询看起来是个不错的选择.但我还有另一个选择:全文搜索。搜索 SOSL 的文档。 salesforce.com/us/developer/docs/apexcode/… 和我的回答 stackoverflow.com/questions/3122038/how/3139653#3139653(关于控制器的部分)。
    猜你喜欢
    • 2011-04-29
    • 2011-09-20
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多