测试过程中偶然发现的Mysql中str_to_date()与date_format()的一点差异

前言

       今天在测试过程中发现str_to_date()与date_format()有点不同:在Java程序中使用str_to_date()date_format()都可以查出结果,但是在Navicat中使用str_to_date()时竟然查不到结果,而date_format()可以。让人有点困惑,特此一记。

SQL(一)与SQL(二)语句唯一不同就在于where条件:

    AND a.ALARM_TIME >= DATE_FORMAT(now(),'%Y-%m-%d 00:00:00')
    AND a.ALARM_TIME <= DATE_FORMAT(now(),'%Y-%m-%d 23:59:59')

    AND a.ALARM_TIME >= str_to_date('2020-07-21 00:00:00','#Y-#m-#d #H:#i:#s')
    AND a.ALARM_TIME <= str_to_date('2020-07-21 23:59:59','#Y-#m-#d #H:#i:#s')

其他条件均一致。

SQL(一).

SELECT
	a.run_org_code AS orgCode,
	CONCAT( a.run_org_name, '(', a.run_org_code, ')' ) AS runOrgName,
	a.USER_ORG_CODE,
	a.CAR_NUM,
	a.ROUTE_CODE,
	a.ROUTE_NAME,
	a.BILL_NUM,
	a.BILL_NO,
	a.CAR_ID,
	a.ALARM_TIME,
	date_format( a.ALARM_TIME, '#Y-#m-#d #H:#i:#s' ) AS alarmTimeStr,
	a.ALARM_FLAG,
	a.ALARM_DETIL,
	a.ALARM_RELEASE_TIME,
	date_format( a.ALARM_RELEASE_TIME, '#Y-#m-#d #H:#i:#s' ) AS alarmReleaseTimeStr,
CASE
	
	WHEN a.alarm_flag = '1' THEN
	'执行邮路异常停驻' 
	WHEN a.alarm_flag = '2' THEN
	'邮路偏离报警' 
	WHEN a.alarm_flag = '3' THEN
	'厢门开启报警' 
	WHEN a.alarm_flag = '4' THEN
	'车辆超速报警' 
	WHEN a.alarm_flag = '6' THEN
	'疲劳驾驶报警' 
	WHEN a.alarm_flag = '8' THEN
	'邮路运行期设备失步' 
	WHEN a.alarm_flag = '11' THEN
	'烟雾报警' 
	WHEN a.alarm_flag = '13' THEN
	'干线车辆早发异常' ELSE '其他' 
	END AS alarmFlagStr,
CASE
		
		WHEN a.del_flag = '0' THEN
		'未处理' 
		WHEN a.del_flag = '1' THEN
		'已处理' 
	END AS delFlagStr,
	a.DEL_FLAG,
	a.DRIVER_NAME,
	a.DRIVER_NO,
	a.SPEED,
	a.ALARM_IS,
	a.ALARM_CONN,
	a.ALARM_ID,
	a.PC_NO,
	a.GMT_MODIFIED,
	date_format( a.GMT_MODIFIED, '#Y-#m-#d #H:#i:#s' ) AS gmtModifiedStr,
	a.veh_company 
FROM
	mpm_gps_caralarm_detail a,
	ods_bic_org_relationship b,
	ods_bic_org_relationship c,
	ods_bic_org_relationship d 
WHERE
	1 = 1 
	AND a.run_org_code = b.org_code 
	AND a.org_code_origin = c.org_code 
	AND a.org_code_terminal = d.org_code 
	AND a.ALARM_LEVEL = '1' 
	AND a.ALARM_TIME >= DATE_FORMAT(now(),'%Y-%m-%d 00:00:00') 
	AND a.ALARM_TIME <= DATE_FORMAT(now(),'%Y-%m-%d 23:59:59') 
	AND a.LINE_TYPE IN ( '1' ) 
	AND a.DEL_FLAG IN ( '0' ) 
	AND a.ALARM_FLAG IN ( '13' ) 
	AND a.is_delete = '0' 
ORDER BY
a.run_org_code;

 

这个语句在Java程序和Navicat中执行都可以查找数据。

 

SQL(二).

SELECT
    a.run_org_code AS orgCode,
    CONCAT( a.run_org_name, '(', a.run_org_code, ')' ) AS runOrgName,
    a.USER_ORG_CODE,
    a.CAR_NUM,
    a.ROUTE_CODE,
    a.ROUTE_NAME,
    a.BILL_NUM,
    a.BILL_NO,
    a.CAR_ID,
    a.ALARM_TIME,
    date_format( a.ALARM_TIME, '#Y-#m-#d #H:#i:#s' ) AS alarmTimeStr,
    a.ALARM_FLAG,
    a.ALARM_DETIL,
    a.ALARM_RELEASE_TIME,
    date_format( a.ALARM_RELEASE_TIME, '#Y-#m-#d #H:#i:#s' ) AS alarmReleaseTimeStr,
CASE
    
    WHEN a.alarm_flag = '1' THEN
    '执行邮路异常停驻'
    WHEN a.alarm_flag = '2' THEN
    '邮路偏离报警'
    WHEN a.alarm_flag = '3' THEN
    '厢门开启报警'
    WHEN a.alarm_flag = '4' THEN
    '车辆超速报警'
    WHEN a.alarm_flag = '6' THEN
    '疲劳驾驶报警'
    WHEN a.alarm_flag = '8' THEN
    '邮路运行期设备失步'
    WHEN a.alarm_flag = '11' THEN
    '烟雾报警'
    WHEN a.alarm_flag = '13' THEN
    '干线车辆早发异常' ELSE '其他'
    END AS alarmFlagStr,
CASE
        
        WHEN a.del_flag = '0' THEN
        '未处理'
        WHEN a.del_flag = '1' THEN
        '已处理'
    END AS delFlagStr,
    a.DEL_FLAG,
    a.DRIVER_NAME,
    a.DRIVER_NO,
    a.SPEED,
    a.ALARM_IS,
    a.ALARM_CONN,
    a.ALARM_ID,
    a.PC_NO,
    a.GMT_MODIFIED,
    date_format( a.GMT_MODIFIED, '#Y-#m-#d #H:#i:#s' ) AS gmtModifiedStr,
    a.veh_company
FROM
    mpm_gps_caralarm_detail a,
    ods_bic_org_relationship b,
    ods_bic_org_relationship c,
    ods_bic_org_relationship d
WHERE
    1 = 1
    AND a.run_org_code = b.org_code
    AND a.org_code_origin = c.org_code
    AND a.org_code_terminal = d.org_code
    AND a.ALARM_LEVEL = '1'
    AND a.ALARM_TIME >= str_to_date('2020-07-21 00:00:00','#Y-#m-#d #H:#i:#s')
    AND a.ALARM_TIME <= str_to_date('2020-07-21 23:59:59','#Y-#m-#d #H:#i:#s')
    AND a.LINE_TYPE IN ( '1' )
    AND a.DEL_FLAG IN ( '0' )
    AND a.ALARM_FLAG IN ( '13' )
    AND a.is_delete = '0'
ORDER BY
a.run_org_code;

 

这个语句在库中没法查到数据,只因为 select str_to_date('2020-07-21 23:59:59','#Y-#m-#d #H:#i:#s') 执行结果就是null。

原因:猜想是项目使用的封装好的数据访问层框架做了一层转换,导致(二)语句在程序中可以查到结果,但是在Navicat中执行时查找不到。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值