select (UNIX_TIMESTAMP(cast(DATE_ADD(NOW(), interval -1 day) as DATE))) as time
union all
select (UNIX_TIMESTAMP(cast(DATE_ADD(NOW(), interval -1 day) as DATE))) as time
OceanBase数据库这个sql语句单独执行每条结果时间是对的 union all以后结果就变了 是啥情况?
在OceanBase数据库中,执行上述SQL语句可能导致结果出现变化的一个可能原因是,在执行UNION ALL操作时,两个子查询返回的数据类型不匹配。
根据您提供的SQL语句,两个子查询都使用了UNIX_TIMESTAMP函数来将日期转换为时间戳。然而,由于表达式"(UNIX_TIMESTAMP(cast(DATE_ADD(NOW(), interval -1 day) as DATE)))"返回的结果是整数类型(时间戳),而非日期类型。
当进行UNION ALL操作时,要求两个子查询返回的列具有相同的数据类型。但由于您的子查询返回的是整数类型(时间戳),可能与其他查询结果(日期或字符串类型)进行合并时产生冲突,从而导致结果出现变化。
为了解决此问题,您可以尝试将子查询返回的时间戳结果转换为日期类型,以保持数据类型的一致性。例如,可以使用FROM_UNIXTIME函数将时间戳转换回日期格式,如下所示:
SELECT FROM_UNIXTIME((UNIX_TIMESTAMP(cast(DATE_ADD(NOW(), interval -1 day) as DATE)))) as time
UNION ALL
SELECT FROM_UNIXTIME((UNIX_TIMESTAMP(cast(DATE_ADD(NOW(), interval -1 day) as DATE)))) as time
union all 是直接对两个查询结果集进行合并输出。可以参考下官方文档
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000033580
此回答整理自钉群“[社区]技术答疑群OceanBase”。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。