mysql - DATE_FORMAT 与字符串和数字进行比较

标签 mysql

我相信我是一个熟练的 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 开头。

在第二种情况下,不等式的右侧是整数,MySQL 将左侧的文本数字转换为整数来进行比较:

SELECT
    12 >= 11 AND 12 <= 7

这是错误的,这是使用实际数字的这些不等式的预期行为。

关于mysql - DATE_FORMAT 与字符串和数字进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57111272/

相关文章:

MySQL 说用户访问被拒绝

javascript - 无法使用 Node.js 更新 Mysql 数据库

java - Hibernate - 找不到适合 jdbc :mysql//* 的驱动程序

MYSQL/SQLWave - 从 Join 生成不同的数据

mysql - 如何在LIKE Mysql中使用CONCAT_WS/GROUP_CONCAT?

mysql - 如何使用 MYSQL 将同名的所有行连接到一个表中?

mysql - 如何将 sql 时间戳作为列名?

mysql - 私有(private)聊天系统 - 获取每次聊天的最后一条消息

php - Codeigniter 注册时自动发送欢迎电子邮件 - 帮助

mysql - 更新表中的行时出错