可以正常查询的SQL,将结果集插入到目标表中出现时间格式的转换错误,经过分析是由于日常字段数据转换不规范导致
SELECT
*
FROM
(
SELECT
DATE_SUB( '2020-07-23', INTERVAL 1 DAY ) AS 'date_time',
'0-1' AS 'user_status',
count( DISTINCT uu.UID ) AS 'user_count'
FROM
(
SELECT DISTINCT
uu.UID
FROM
(
SELECT
*
FROM
db_hpc_v1.tbuser
WHERE
date_format( IFNULL( RegisterTime, '' ), '%Y-%m-%d' ) < DATE_SUB( '2020-07-23', INTERVAL 0 DAY )
) uu
LEFT JOIN (
SELECT
*
FROM
db_hpc_v1.tborderb2coffline
WHERE
date_format( IFNULL( MakeTime, '' ), '%Y-%m-%d' ) < DATE_SUB( '2020-07-23', INTERVAL 0 DAY )
AND OrgOID NOT IN ( "6487291868429156352" )
) loff ON uu.UID = loff.useruid
WHERE
loff.useruid IS NULL
) uu
INNER JOIN (
SELECT
UserUID
FROM
db_hpc_v1.tbuservisitoffline
WHERE
date_format( IFNULL( TimeIn, '' ), '%Y-%m-%d' ) < DATE_SUB( '2020-07-23', INTERVAL 0 DAY )
) loff ON uu.UID = loff.useruid
) tt;
INSERT INTO db_warehouse.dm_user_status_report ( date_time, user_state, user_count )
SELECT
*
FROM
(
SELECT
DATE_SUB( '2020-07-23', INTERVAL 1 DAY ) AS 'date_time',
'0-1' AS 'user_status',
count( DISTINCT uu.UID ) AS 'user_count'
FROM
(
SELECT DISTINCT
uu.UID
FROM
(
SELECT
*
FROM
db_hpc_v1.tbuser
WHERE
date_format( IFNULL( RegisterTime, '' ), '%Y-%m-%d' ) < DATE_SUB( '2020-07-23', INTERVAL 0 DAY )
) uu
LEFT JOIN (
SELECT
*
FROM
db_hpc_v1.tborderb2coffline
WHERE
date_format( IFNULL( MakeTime, '' ), '%Y-%m-%d' ) < DATE_SUB( '2020-07-23', INTERVAL 0 DAY )
AND OrgOID NOT IN ( "6487291868429156352" )
) loff ON uu.UID = loff.useruid
WHERE
loff.useruid IS NULL
) uu
INNER JOIN (
SELECT
UserUID
FROM
db_hpc_v1.tbuservisitoffline
WHERE
date_format( IFNULL( TimeIn, '' ), '%Y-%m-%d' ) < DATE_SUB( '2020-07-23', INTERVAL 0 DAY )
) loff ON uu.UID = loff.useruid
) tt;
1815 - [40040, 2020072717291517203022114803453384091] Query execution error: : Value cannot be cast to time:
date_format( IFNULL( TimeIn, '' ), '%Y-%m-%d' ) < DATE_SUB( '2020-07-23', INTERVAL 0 DAY )
使用date_format()函数判断时间是否为null时,指定的时间格式不可以是’’,查询没问题,但是在insert into关联使用时,不可以被识别为可转换的时间格式
INSERT INTO db_warehouse.dm_user_status_report ( date_time, user_state, user_count )
SELECT
*
FROM
(
SELECT
DATE_SUB( '2020-07-23', INTERVAL 1 DAY ) AS 'date_time',
'0-1' AS 'user_state',
count( DISTINCT uu.UID ) AS 'user_count'
FROM
(
SELECT DISTINCT
uu.UID
FROM
(
SELECT
*
FROM
db_hpc_v1.tbuser
WHERE
date_format( IFNULL( RegisterTime, '3030-01-01' ), '%Y-%m-%d' ) < DATE_SUB( '2020-07-23', INTERVAL 0 DAY )
) uu
LEFT JOIN (
SELECT
*
FROM
db_hpc_v1.tborderb2coffline
WHERE
date_format( IFNULL( MakeTime, '3030-01-01' ), '%Y-%m-%d' ) < DATE_SUB( '2020-07-23', INTERVAL 0 DAY )
AND OrgOID NOT IN ( "6487291868429156352" )
) loff ON uu.UID = loff.useruid
WHERE
loff.useruid IS NULL
) uu
INNER JOIN (
SELECT
UserUID
FROM
db_hpc_v1.tbuservisitoffline
WHERE
date_format( IFNULL( TimeIn, '3030-01-01' ), '%Y-%m-%d' ) < DATE_SUB( '2020-07-23', INTERVAL 0 DAY )
) loff ON uu.UID = loff.useruid
) tt;
日常SQL语法需要规范书写,对应的字段格式需要正确使用,减少出现没有必要的错误。