mysql - DATE_FORMAT 与字符串和数字进行比较
问题描述
我相信我是一个熟练的 mysql 用户,但显然我不是。
我以为 mysql 会在比较之前进行转换,但是这个查询让我感到困惑:
SELECT
DATE_FORMAT('2019-07-19 12:05:12', '%H') >= '11' AND DATE_FORMAT('2019-07-19 12:05:12', '%H') <= '7' AS 'str',
DATE_FORMAT('2019-07-19 12:05:12', '%H') >= 11 AND DATE_FORMAT('2019-07-19 12:05:12', '%H') <= 7 AS 'num';
str num
------ --------
1 0
那么比较是如何真正起作用的呢?什么被铸造成什么?
解决方案
在第一种情况下,这里实际上似乎根本没有任何转换,因为DATE_FORMAT
返回一个字符串。正在进行的比较是:
SELECT
'12' >= '11' AND '12' <= '7' AS str
这是真的,因为文本 '12'
在字典上大于'11'
,并且'12'
也“小于”,'7'
因为前者以 开头1
。
在第二种情况下,不等式的 RHS 是整数,MySQL 将 LHS 上的文本数字转换为整数以进行比较:
SELECT
12 >= 11 AND 12 <= 7
这是错误的,这是使用实际数字的这些不等式的预期行为。
推荐阅读
- mysql - Sqoop:使用 sql 函数通过 --split-by 导入
- ruby-on-rails - Rails Routing 新的关联路径
- c - 如何从动态字符串中删除换行符
- r - 在 R 中粘贴时,如何正确对齐格式化字符串?
- javascript - Jquery克隆/删除 - 将元素添加到输出
- javascript - 事件与鼠标事件
- php - 如何在执行所有脚本之前打印用 php 制作的内容
- html - //和http或https有什么区别
- r - 计算另一个数据集中时间戳之前一定数量行的平均值和梯度
- schema.org - 使用角色的 hasOccupation 对象数组的 SDTT 错误:“hasOccupation 不是 hasOccupation 属性的已知有效目标类型”