今天些业务使用了 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 做了这一步吗?
1
jzmws 2020-04-28 16:02:36 +08:00
select (DATE_FORMAT( '2018-12-31 10:37:12', '%Y-%m') = DATE_FORMAT( '2019-01', '%Y-%m') ) 为 true
|
2
qwerthhusn 2020-04-28 17:25:57 +08:00
2019-01 这种东西是字面量吗?
select 2019-01 得到的却是 2018 不知道编译器怎么弄的 |
3
panzhc 2020-04-28 23:08:04 +08:00
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'); |
4
qwerthhusn 2020-04-29 14:51:39 +08:00
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 |
5
Aresxue 2020-04-30 10:50:42 +08:00
不加字符串会认为是数字, 2019-01 会被当做 2019 - 1 = 2018, 所以会不等, 加上引号才是字符串, 对于你程序来说你是 String 类型所以转成 sql 就是带引号的字符串
|