› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
liubx
V2EX  ›  MySQL

关于 mysql DATE_FORMAT()函数的疑问

  •  
  •   liubx · Apr 28, 2020 · 3779 views
    This topic created in 2341 days ago, the information mentioned may be changed or developed.

    今天些业务使用了 springjdbc,发现了 DATE_FORMAT()的一个问题:

    	select (DATE_FORMAT( '2018-12-31 10:37:12', '%Y-%m') = 2019-01) 为 true
        
    	select (DATE_FORMAT( '2018-12-31 10:37:12', '%Y-%m') = '2019-01') 为 false 
    
    

    请问为什么会有这种结果啊?

    还要为什么 jdbc 中的字符串转成 sql 后不会带上单引号,而 mybatis 会带上单引号?是 mybatis 做了这一步吗?

    5 replies  •  2020-04-30 10:50:42 +08:00
    jzmws
        1
    jzmws  
       Apr 28, 2020
    select (DATE_FORMAT( '2018-12-31 10:37:12', '%Y-%m') = DATE_FORMAT( '2019-01', '%Y-%m') ) 为 true
    qwerthhusn
        2
    qwerthhusn  
       Apr 28, 2020
    2019-01 这种东西是字面量吗?
    select 2019-01 得到的却是 2018
    不知道编译器怎么弄的
    panzhc
        3
    panzhc  
       Apr 28, 2020
    select timestamp('2020-04-28 23:06:00') - timestamp('2020-04-28 23:05:00');
    select timestamp('2020-04-28 23:06:00') - timestamp('2020-04-28 23:05:30');
    qwerthhusn
        4
    qwerthhusn  
       Apr 29, 2020
    select DATE_FORMAT( '2018-12-31 10:37:12', '%Y-%m') = 2018; #返回 1
    select DATE_FORMAT( '2018-12-31 10:37:12', '%Y-%m') = '2018'; #返回 0
    select DATE_FORMAT( '2018-12-31 10:37:12', '%Y-%m') = '2018-12'; #返回 1

    那个 2019-01 没加引号会变成 2018,而上面的第一行也是 true
    Aresxue
        5
    Aresxue  
       Apr 30, 2020
    不加字符串会认为是数字, 2019-01 会被当做 2019 - 1 = 2018, 所以会不等, 加上引号才是字符串, 对于你程序来说你是 String 类型所以转成 sql 就是带引号的字符串
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1200 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:17 · PVG 01:17 · LAX 10:17 · JFK 13:17
    ♥ Do have faith in what you're doing.