我讀過2005年的帖子,人們說SOQL不支持字符串連接。是否可以在SOQL中連接字符串?
雖然想知道是否支持,並有人已經這樣做。
我想Concat的,但沒有運氣:(
下面是APEX代碼試圖找到紀錄指定的電子郵件。
String myEmail = '[email protected]';
String foo = 'SELECT emailTo__c, source__c FROM EmailLog__c
WHERE source__c = \'' +
myEmail + '\';
Database.query(foo)
即使記錄確實是在數據庫中,它無法查詢任何東西。調試顯示 「行(0)」,這意味着空返回。
我做錯CONCAT走錯了路?
UPDATE
我剛剛發現一種方法不必添加單引號。只需要對具有查詢的字符串應用相同的冒號變量即可。
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不能用單引號包圍。
原因之一是因爲我有3個字段,如果用戶指定了任何字段,那些字段(即表列)用於構造查詢。例如,如果用戶輸入'firstname'和'lastname'字段,查詢將看起來像SELECT all FROM fooTable WHERE firstname = $ userinput AND lastname = $ userinput; – 2010-11-16 04:29:36
在這種情況下,我只能連接'firstname = $ userinput AND'等等任何替代方法? – 2010-11-16 04:30:31
當然,您可以綁定多個變量'[SELECT Id FROM EmailLog__c WHERE column1 =:input1 AND colum2 = input2]'...但是,您將放置的發燒友邏輯,可讀性較差的查詢將會......因此,在您案例動態查詢看起來是不錯的選擇。但我仍然有另一種選擇:全文搜索。搜索SOSL的文檔。 http://www.salesforce.com/us/developer/docs/apexcode/index_Left.htm#StartTopic=Content/langCon_apex_SOQL.htm?SearchType=Stem和我的答案http://stackoverflow.com/questions/3122038/how/ 3139653#3139653(關於控制器的部分)。 – eyescream 2010-11-16 06:39:26