Universe Rocket U2系统中YYYYMMDD字符串转日期的SQL查询问题
解决Universe Rocket U2中YYYYMMDD字符串转日期的SQL问题
在Universe Rocket U2的SQL环境中,没有直接将YYYYMMDD格式字符串转为日期的内置函数,但可以通过拆分字符串+构造日期的方式实现,以下是修正后的查询方案:
核心思路
利用SUBSTRING函数拆分YYYYMMDD字符串的年、月、日部分,再通过U2 SQL的DATE(year, month, day)构造函数生成日期类型;同时使用DATEADD函数处理日期的加减操作(比直接加减更稳妥)。
修正后的SQL查询
SELECT id FROM bars WHERE CURRENT_DATE BETWEEN DATEADD('day', -3, DATE(CAST(SUBSTRING(starting_date, 1, 4) AS INTEGER), CAST(SUBSTRING(starting_date, 5, 2) AS INTEGER), CAST(SUBSTRING(starting_date, 7, 2) AS INTEGER))) AND DATEADD('day', 3, DATE(CAST(SUBSTRING(ending_date, 1, 4) AS INTEGER), CAST(SUBSTRING(ending_date, 5, 2) AS INTEGER), CAST(SUBSTRING(ending_date, 7, 2) AS INTEGER)));
代码说明
SUBSTRING(starting_date, 1, 4):提取字符串前4位作为年份,CAST(...) AS INTEGER将字符串转为整数,确保日期构造函数能正确识别参数类型。DATE(year, month, day):U2 SQL的日期构造函数,接收整数类型的年、月、日参数,生成标准日期类型。DATEADD('day', -3, date_value):对目标日期进行天数加减,第一个参数指定单位(这里是day),第二个参数是增减的天数,第三个参数是目标日期。
简化写法(若U2支持字符串直接转整数)
如果你的U2版本允许直接将数字格式的字符串传入DATE函数,可以省略CAST转换,简化为:
SELECT id FROM bars WHERE CURRENT_DATE BETWEEN DATEADD('day', -3, DATE(SUBSTRING(starting_date, 1, 4), SUBSTRING(starting_date, 5, 2), SUBSTRING(starting_date, 7, 2))) AND DATEADD('day', 3, DATE(SUBSTRING(ending_date, 1, 4), SUBSTRING(ending_date, 5, 2), SUBSTRING(ending_date, 7, 2)));
内容的提问来源于stack exchange,提问作者Xnate Maxime
相关产品推荐
相关产品推荐

