Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql “等于”运算符中的数据类型time和datetime不兼容?_Mysql_Coldfusion - Fatal编程技术网

Mysql “等于”运算符中的数据类型time和datetime不兼容?

Mysql “等于”运算符中的数据类型time和datetime不兼容?,mysql,coldfusion,Mysql,Coldfusion,我在尝试根据日期、开始时间和结束时间删除表行后出现此错误。我使用onClick函数从表行传递日期、开始和结束时间。然后我使用Ajax发送这些值。这是我的密码: <cfoutput query="qryView"> <table> <tr> <td>#dateFormat(DateSch,"mm/dd/yyyy")#</td> <td>#timeFormat(S

我在尝试根据日期、开始时间和结束时间删除表行后出现此错误。我使用onClick函数从表行传递日期、开始和结束时间。然后我使用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>
然后我将dateFormat放在我传递的日期值周围,将timeFormat放在时间值周围。这解决了这个问题。在我的Ajax调用之后,我遇到了一个错误:

"The data types time and datetime are incompatible in the equal to operator"
我在参数中发送的值如下所示:

SyntaxError: missing ) after argument list    
deleteDate('74','{ts '2015-12-10 00:00:00'}','1970-01-01 08:00:00.0','1970-01-01...
DateSch 
12/10/2015
Etime   
08:25 AM
Stime   
08:00 AM
<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>

我不知道为什么会出现这个错误。在cfquery中使用这些值之前,我曾尝试在coldfusion中使用createDateTime函数转换这些值,但这没有帮助。有人知道如何修复此错误/将datetime与我的值进行比较吗?

尝试以下方法:

SyntaxError: missing ) after argument list    
deleteDate('74','{ts '2015-12-10 00:00:00'}','1970-01-01 08:00:00.0','1970-01-01...
DateSch 
12/10/2015
Etime   
08:25 AM
Stime   
08:00 AM
<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>

从表中删除
其中DATEDIFF(DateS,)=0
和TIMEDIFF(Start,)=0
和时间差(结束,)=0
我不熟悉ColdFusion,所以我不能肯定前面的内容没有语法错误。此外,您可能必须将日期格式更改为
YYYY-MM-DD
,以使MySQL满意。

始终发布完整的错误消息。您发布的查询在MySQL 5.6中运行良好。因此,尽管有“MySQL”标签,我还是强烈怀疑您实际上在使用SQL Server,并且完整的错误消息实际上是这样说的:

[Macromedia][SQLServer JDBC驱动程序][SQLServer]数据类型和时间 日期时间在等于运算符中不兼容

该错误通常是由以下原因引起的。这会导致一个错误,因为查询最终尝试比较苹果和橙子,即时间和日期时间

某些MS SQL Server驱动程序支持通过添加到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>

从表名中删除
其中DateSch=
和时间=演员阵容(按时间)
和时间=演员(按时间)

我认为这对这种情况没有帮助,DateDiff会给我一个date1小于date2的日期。您正在寻找
DateS=someotherdate
。使用DATEDIFF,当两个日期相同时,测试DATEDIFF(DateS,someotherdate)=0。。。您是否先验证了cfquery是否有效?如果没有,现在就跳过ajax。首先对查询进行故障排除,因为如果查询不起作用,ajax肯定也不会起作用。在单独的页面上测试cfquery,使用上面的一些变量和示例值。结果是什么-相同的错误?如果是这样,请添加A)问题的完整错误消息(包括行号和任何生成的SQL)和B)这三列的数据类型:日期、开始、结束。(我假设这些不是实际的列,因为“Start”和“End”都是保留字。)我测试了我的cfquery,仅使用ajax传递的值就可以正常工作。对于日期时间,我使用了一个例子:“2015-12-11”这很有效,但这也适用于“12/11/2015”。对于开始时间,我使用'08:00 AM'和结束时间'08:15 AM'。我在db中将这两列命名为StartTime和EndTime。这三列的数据类型还有日期、时间(7)和时间(7)。这就是我的参数值如何发送到cfc页面值={“ETIME”:“08:15 AM”,“STIME”:“08:00 AM”,“DATESCH”:“2015-12-11”}我解决了这个问题。在Where子句中,我使用CONVERT()和VARCHAR作为参数的前面。现在,我的cfquery工作正常。如果必须强制转换,请避免使用
varchar
,因为这会导致隐式转换,在某些情况下会导致奇怪的结果。相反,请使用与操作数左侧相同的数据类型。我很少使用时间列。通常,我更喜欢使用单个日期/时间列进行更简单的查询,但可以尝试使用time(..)函数或CAST(…AS time)。但这在“2015年11月12日”也很有效。是的,CF可以自动解析大多数日期字符串。虽然它对“认为”是日期和时间的值有相当广泛的解释,所以验证日期/时间字符串通常是个好主意。仅供参考,请回滚到以前的版本,以便现有的注释和答案仍然有意义。请随意发布您的最终代码作为“答案”。在S.O.上允许回答您自己的问题。。