2009-08-14 26 views
6

私はセット私の結果に文字列を連結するために、SQL Serverの構文のこの種に精通している:私は、クエリのColdFusionのクエリ内の似た何かをしたいと思いますColdFusionのクエリクエリで文字列連結を行うことはできますか?

SELECT 'foo' + bar AS SomeCol 
FROM SomeTable 

<cfquery name="qOptimize" dbtype="query"> 
    select 
     image_id AS imageId, 
     '#variables.img_root#' + image_id + '.' + image_ext AS fullImage, 
     '#variables.img_root#' + image_id + 't.' + image_ext AS thumbnailImage, 
    from qLookup 
    order by imageId asc 
</cfquery> 

これはFlexアプリケーションで消費されるサービスの一部なので、アプリケーションに格納されたストアドプロシージャの結果をクライアントに返す前に最適化しています。使用されていない列を取り除き、いくつかの動的パス情報。

私はパフォーマンス上の理由のための新しい保存され、をパラメータとしてイメージルートを取り、このすべてを行い手順、おそらく Iを書くことができますが、問題はまだ私をしつこいれます。私はまだ動作する構文を見つけていないので、可能かどうか疑問に思います。

私は上記をしようとすると、私は次のエラーを取得:誰もがこれを

Query Of Queries syntax error.
Encountered "from. Incorrect Select List, Incorrect select column,

行われていますか?多分別の構文で可能でしょうか?

答えて

11

はいこれが可能です。問題はimage_idが数値の可能性が高いことだと思います。それをvarcharとしてキャストすると、それはうまくいくはずです。

<cfquery name="qOptimize" dbtype="query"> 
    select 
     image_id AS imageId, 
     '#variables.img_root#' + cast(image_id as varchar) + '.' + image_ext AS fullImage, 
     '#variables.img_root#' + cast(image_id as varchar) + 't.' + image_ext AS thumbnailImage 
    from qLookup 
    order by imageId asc 
</cfquery> 
+0

ている私は、ストアドプロシージャにそれを変換したときに、このに走ったが、ありがとう。 –

+0

しかし、postgresデータベースが使用されている場合、同じ文字列を連結する方法 –

+0

ANSI標準の連結演算子 '|| ' –

5

私はあなたが言及エラーがthumbnailImageにの終わりに、最後の連結にカンマが原因だと思います。

ちょうど私の$ 0.002

+0

を100%同意することにより、サンプルコードが使用された実際のコードであった場合、最後のカンマは取引遮断器でした。良い点。 – jyoseph

0

またはも、あなたは、ColdFusionのレベルではなく、クエリ自体にCONCATENATEをする必要はありません。

私の例では、私はすでに、私はと掘り下げるするクエリの結果オブジェクトを持っていますクエリのクエリ。クエリresulのTObjectのデータと1000行の10列があり、列名は、C1、C2、C3、C4、C5、...

<cfset dbzeilerest = "2 4 - 3"><!--- beg qoq to concatenate those columns ---> 
    <cfset sqlcodehere = "("> 
    <cfloop list="#dbzeilerest#" delimiters="," index="t"> 
     <cfif val(t) GT 0> 
      <cfset sqlcodehere = sqlcodehere & "C" & val(t) & " || "> 
     <cfelse> 
      <cfset sqlcodehere = sqlcodehere & "'" & t & "' || "> 
     </cfif> 
    <!--- concat in coldfusion sql qoq: 
      (C2 || ' ' || C4 || ' ' || '-' || ' ' || C3) as combii ---> 
    </cfloop> 
    <cfset sqlcodehere = sqlcodehere & " '') as combii"> 
    <cfquery name="dbtexttemp2" dbtype="query"> 
    SELECT DISTINCT #PreserveSingleQuotes(sqlcodehere)# FROM dbtexttemplistequery 
    </cfquery> 
+0

これは非常に特殊なケースのようです。一般に、SQLインジェクションに「データベース」クエリを公開する可能性があるため、可能であれば動的SQLを避けるほうがよいです。言うまでもありませんが、dbが最適化することはしばしばより困難です。 – Leigh

関連する問題