我尝试根据日期,开始和结束时间删除表格行后出现此错误。我使用onClick函数从表行传递Date,start和end time。然后我使用Ajax发送这些值。这是我的代码:
<cfoutput query="qryView">
<table>
<tr>
<td>#dateFormat(DateSch,"mm/dd/yyyy")#</td>
<td>#timeFormat(Stime,"hh:mm tt")#</td>
<td>#timeFormat(Etime,"hh:mm tt")#</td>
<td onClick="deleteDate('#dateFormat(DateSch,"mm/dd/yyyy")#','#timeFormat(Stime,"hh:mm tt")#','#timeFormat(Etime,"hh:mm tt")#')">Delete</td>
</tr>
</table>
</cfoutput>
<script>
function deleteDate(DateSch,Stime,Etime){
$.ajax(
{
type:'POST',
url:'/AjaxFunction.cfc?method=deleteSchedule&returnformat=json',
data:{'DateSch':DateSch,'Stime':Stime,'Etime':Etime},
cache:false,
success: function(data,x,xhrobj)
{
var Result = $.parseJSON(data);
if($.trim(Result.STATUS) == '200'){
alert('Removed!');
}else{
alert(Result.message);
}
}
});
}
</script>
这是我的删除查询:
<cfquery name="qryDelete" datasource="test">
Delete From Table
Where DateS = <cfqueryparam cfsqltype="cf_sql_date" value="#arguments.DateSch#">
and Start = <cfqueryparam cfsqltype="cf_sql_time" value="#arguments.Stime#">
and End = <cfqueryparam cfsqltype="cf_sql_time" value="#arguments.Etime#">
</cfquery>
首先,当我尝试点击按钮删除时,我得到了一个像这样的java脚本错误:
SyntaxError: missing ) after argument list
deleteDate('74','{ts '2015-12-10 00:00:00'}','1970-01-01 08:00:00.0','1970-01-01...
然后我将dateFormat放在我传递的日期值和timeFormat的时间值附近。这解决了这个问题。然后我在Ajax调用后遇到错误:
"The data types time and datetime are incompatible in the equal to operator"
我在论证中发送的价值观如下:
DateSch
12/10/2015
Etime
08:25 AM
Stime
08:00 AM
我不知道为什么我会收到这个错误。我尝试在coldfusion中使用createDateTime函数转换这些值,然后在cfquery中使用它们,但这没有帮助。有谁知道如何修复此错误/比较日期时间与我的值?
答案 0 :(得分:1)
始终发布完整错误消息。您发布的查询适用于MySQL 5.6。因此,尽管有“MySQL”标记,但我强烈怀疑您实际上在使用SQL Server,并且完整的错误消息实际上是这样说的:
[Macromedia] [SQLServer JDBC驱动程序] [SQLServer] 数据类型的时间和 datetime在等于运算符中不兼容。
该错误通常由submitting "time" values as "datetime" values引起。这会导致错误,因为查询最终会尝试比较苹果和橙子,即时间和日期时间。
某些MS SQL Server驱动程序支持通过将sendTimeAsDateTime=false
添加到DSN连接属性来禁用该行为。不幸的是,这似乎不适用于核心Adobe数据库驱动程序。如您所发现,您将需要使用强制转换或转换。但是,请勿使用varchar
。这将导致隐式转换,这可能导致某些情况下的古怪结果。而是使用与操作数左侧相同的数据类型,即time
<cfquery datasource="theDatasource">
DELETE FROM TableName
WHERE DateSch = <cfqueryparam cfsqltype="cf_sql_date" value="#arguments.DateSch#">
AND STime = CAST(<cfqueryparam cfsqltype="cf_sql_time" value="#arguments.Stime#"> AS TIME)
AND ETime = CAST(<cfqueryparam cfsqltype="cf_sql_time" value="#arguments.Etime#"> AS TIME)
</cfquery>
答案 1 :(得分:0)
尝试这样的事情:
<cfquery name="qryDelete" datasource="test">
Delete From Table
Where DATEDIFF(DateS, <cfqueryparam cfsqltype="cf_sql_date" value="#arguments.DateSch#">) = 0
and TIMEDIFF(Start, <cfqueryparam cfsqltype="cf_sql_time" value="#arguments.Stime#">) = 0
and TIMEDIFF(End, <cfqueryparam cfsqltype="cf_sql_time" value="#arguments.Etime#">) = 0
</cfquery>
我不熟悉ColdFusion,因此我无法确定前面没有语法错误。此外,您可能需要将日期格式更改为YYYY-MM-DD
以使MySQL保持高兴。