から適応はい、違いがある - ではなく、あなたが考えることが可能な方法は。
はNULL
自体のデータ型を有し、一方はSQLの評価の一部として(暗黙的または明示的に)それにに関連されることはありません。上記のSELECTステートメントでは、データ型が列メタデータに適用されます。明示的なCAST
がなければ、data type defaults to INT。
このクエリを取る:あなたは、クエリのメタデータを調べると
<cfquery name="qTest" datasource="#variables.sqlServerDSN#">
SELECT NULL AS NonSpecifiedNull
, CAST(NULL AS datetime) AS DateTimeNull
, CAST(NULL AS varchar(25)) AS VarcharNull
</cfquery>
<cfdump var="#getMetaData(qTest)#" label="Query MetaData">
、クエリは、3つの異なるデータ型の列が含まれています。integer
、datetime
とvarchar
:

のColdFusionからデータ型は、さまざまな関数、比較、QoQ、およびクエリオブジェクトitseの変更時に列の値がどのように解釈されるかに影響しますlf。たとえば、3つの列のそれぞれを日付時間オブジェクトで更新します。
<cfset dateTimeNow = now()>
<cfset qTest.NonSpecifiedNull[1] = dateTimeNow>
<cfset qTest.DateTimeNull[1] = dateTimeNow>
<cfset qTest.VarcharNull[1] = dateTimeNow>
<cfdump var="#qTest#" label="Query Values">
結果は非常に異なります。 "DateTimeNull"に挿入された値は、日付オブジェクトのままです。ただし、 "VarcharNull"に挿入すると同じ値が文字列に変換され、 "NonSpecifiedNull"に挿入されると整数に変換されます。後者の2つは、ほぼ確実にではなく、の日付オブジェクトの処理方法を示します。そのため、元のSQLクエリに適切なCAST
を含める方が良いです。 ColdFusionは非常に寛容であり、比較的型なしで確かに

。したがって、日付オブジェクトを文字列または整数として格納することは、常にハードエラーを引き起こすとは限りません。しかし、最悪の場合にエラーが発生しやすく、間違った結果を生み出す可能性がある暗黙の変換を強制します。 CAST
に最高の
dateCompare(dateTimeNow, qTest.NonSpecifiedNull[1]) eq 0 ? "EQUAL" : "DIFFERENT"
だから、再び:あなたは「NonSpecifiedNull」欄に元の日付を比較した場合たとえば、あなたはおそらく、彼らが等しくなるように期待する、しかし...彼らが原因データ型に、ではありません予想される結果を確実にするために、正面の正しいタイプに調整してください。
cfquery dbtype = "query"またはデータベースをクエリしていますか? UNIONでこのステートメントを使用して両側の型が同一であることを確認する場合は、CAST(datetimeとしてのNULL)を使用すると便利です。 –
私はデータベース呼び出しを行っています –