3

私は解決策をオンラインで探していましたが、何も思い浮かびませんでした。Coldfusion クエリに「date_hired」という列があります。クエリの cfdump を実行すると、日付の場合は日付として、そうでない場合は [空の文字列] として表示されます。クエリには 8 つのレコードがあります。また、date_hired の日付があるものとないものがあります。この結果セットで aq of q を実行しようとすると:

SELECT date_hired
    FROM myQuery
    WHERE date_hired = ''

「= の実行中に比較例外が発生しました。」というエラー メッセージが表示されます。サポートされていない型比較の例外: = 演算子は、次の型間の比較をサポートしていません: 左側の式の型 = "NULL"。右側の式の型 = "STRING"。

さて、クエリを次のように変更します。

SELECT date_hired
    FROM myQuery
    WHERE date_hired IS NOT NULL

ただし、cfdump で date_hired が [空の文字列] である行も含めて、8 行すべてが返されます。同様に、where 句を「where date_hired IS NULL」に変更すると、[空の文字列] の行ではなく、0 行が返されます。

私は途方に暮れています。ISNULL() と LEN() は aq of q では使用できません。幸いなことに、クエリの cfloop を実行して isDate(date_hired) を出力すると、本来あるべき場所で true を返し、あるべき場所で false を返します。そのため、クエリを cfloop してその場で別のクエリを構築できますが、それは難しいことではないことを行うための回り道のように思えます。ここで機能する where 句で使用できる条件はありますか? ありがとう - CM

4

2 に答える 2

1

より速く実行できる別の方法を次に示します。クエリ列を配列として扱うことができるという事実を利用しています。

<cfquery name="dbQuery" datasource="oracleDB">
select trunc(sysdate) theDate
from dual
union
select null theDate
from dual
union
select trunc(sysdate - 1) theDate
from dual
</cfquery>

null ではない値が 2 つあることに注意してください。これ:

<cfdump var="#Listlen(ArrayToList(dbQuery['theDate']))#">

は、求めた数である 2 を返します。

この方法は、Q of Q を使用するよりもおそらく効率的です。ただし、Q of Q の方法はより読みやすく、これも重要です。

于 2016-02-11T11:56:39.367 に答える