我知道这个错误
用于<=操作的非法排序组合
适用于下列WHERE条款:
time(table1.dt1)<=date_add(table1.tim,interval 60 second)dt1 = datetime,tim = time
有人知道为什么吗?
发布于 2012-08-21 11:29:05
DATE_ADD()手册中所解释的那样:
返回值取决于参数:- [`DATETIME`](http://dev.mysql.com/doc/en/datetime.html) if the first argument is a [`DATETIME`](http://dev.mysql.com/doc/en/datetime.html) (or [`TIMESTAMP`](http://dev.mysql.com/doc/en/datetime.html)) value, or if the first argument is a [`DATE`](http://dev.mysql.com/doc/en/datetime.html) and the unit value uses `HOURS`, `MINUTES`, or `SECONDS`.
- String otherwise.在您的示例中,因为table1.tim是一个TIME值,所以函数将返回一个字符串。
字符串在character_set_connection和collation_connection提供的字符集和排序规则中返回。
TIME()手册中所解释的那样:
提取时间或日期时间表达式expr的时间部分,并将其作为字符串返回。字符串作为二进制字符串返回(为什么不使用连接字符集&排序规则超出了我的权限--也许是个bug)。
因此,进行的比较是字符串比较,但是不能强迫binary字符串进行比较(因为它的编码不知道)。因此,你所目睹的错误。
可以强制通过显式铸造之一或两个操作数正确地进行比较,但我只想重做子句,以便从对TIME类型的比较中隐式地进行转换:
TIME(table1.dt1 - INTERVAL 1 MINUTE) <= table1.timhttps://stackoverflow.com/questions/12052254
复制相似问题