Jam*_*ler 4 t-sql coldfusion null
这来自
<cfquery name="data">
SELECT
NULL AS plainNull,
CAST(NULL AS datetime) AS Due_Date
</cfquery>
Run Code Online (Sandbox Code Playgroud)
这两种不同的零件是什么?有什么不同
是的,有区别 - 但不是你想的方式.
它本身并不NULL具有数据类型,作为评估SQL的一部分,它将与它(隐式或显式)相关联.使用上面的SELECT语句,数据类型适用于列元数据.如果没有显式CAST,则数据类型默认为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">
Run Code Online (Sandbox Code Playgroud)
如果检查元数据查询,查询包含了三个不同的数据类型的列:integer,datetime和varchar:
从ColdFusion的角度来看,数据类型会影响列值在各种函数,比较,QoQ中的解释方式,甚至在修改查询对象本身时也是如此.例如,使用日期时间对象更新三列中的每一列:
<cfset dateTimeNow = now()>
<cfset qTest.NonSpecifiedNull[1] = dateTimeNow>
<cfset qTest.DateTimeNull[1] = dateTimeNow>
<cfset qTest.VarcharNull[1] = dateTimeNow>
<cfdump var="#qTest#" label="Query Values">
Run Code Online (Sandbox Code Playgroud)
结果将大不相同.插入"DateTimeNull"的值仍为日期对象.但是,插入"VarcharNull"时,相同的值将转换为字符串,插入"NonSpecifiedNull"时将转换为整数.后两者几乎肯定不是你期望或想要处理日期对象的方式.这就是为什么最好CAST在原始SQL查询中包含适当的.
授予ColdFusion非常宽容,相对无类型.因此,将日期对象存储为字符串或整数可能并不总是会导致硬错误.但是,它确实强制隐式转换,这最多是不必要的,最坏的情况是容易出错和/或可能产生错误的结果.例如,如果您将原始日期与"NonSpecifiedNull"列进行比较,您可能希望它们相等,但由于数据类型,它们不是:
dateCompare(dateTimeNow, qTest.NonSpecifiedNull[1]) eq 0 ? "EQUAL" : "DIFFERENT"
Run Code Online (Sandbox Code Playgroud)
因此,最好先CAST预测正确的类型以确保预期的结果.
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |