首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在等于操作符中,数据类型时间和日期时间是不兼容的?

问在等于操作符中,数据类型时间和日期时间是不兼容的?
EN

Stack Overflow用户
提问于 2015-12-10 23:19:34
回答 2查看 3.3K关注 0票数 1

在尝试根据日期、开始时间和结束时间删除表行后,出现了此错误。我使用onClick函数从表行传递日期、开始时间和结束时间。然后我使用Ajax发送这些值。这是我的代码:

代码语言:javascript
复制
<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>

以下是我的删除查询:

代码语言:javascript
复制
<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>

首先,当我试图单击delete按钮时,我得到了一个java脚本错误,如下所示:

代码语言:javascript
复制
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调用之后,我得到了一个错误:

代码语言:javascript
复制
"The data types time and datetime are incompatible in the equal to operator"

我在辩论中发送的价值观如下所示:

代码语言:javascript
复制
DateSch 
12/10/2015
Etime   
08:25 AM
Stime   
08:00 AM

我不知道我为什么要犯这个错误。在cfquery中使用这些值之前,我尝试使用coldfusion中的createDateTime函数来转换这些值,但这并没有帮助。有人知道我如何修正这个错误/将日期时间与我的值进行比较吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-25 04:05:20

始终发布完整的错误消息。您发布的查询在MySQL 5.6中运行良好。因此,尽管使用了"MySQL“标记,但我强烈怀疑您实际上使用的是Server,完整的错误消息实际上是这样写的:

MacromediaSQLServer数据类型时间和日期时间在等于操作符中是不兼容的。

这个错误通常是由submitting "time" values as "datetime" values引起的。这会导致错误,因为查询最后试图比较苹果和橙子(时间和日期时间)。

一些MS驱动程序支持通过将sendTimeAsDateTime=false添加到DSN连接属性来禁用该行为。不幸的是,这似乎不适用于核心Adobe数据库驱动程序。正如您所发现的,您将需要使用强制转换或转换。但是,不要使用varchar。这将导致隐式转换,在某些情况下会导致奇怪的结果。相反,使用与操作数左侧相同的数据类型( time )。

代码语言:javascript
复制
<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
EN

Stack Overflow用户

发布于 2015-12-10 23:28:41

试着做这样的事情:

代码语言:javascript
复制
<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的快乐。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34213561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档