我试图转换为标题将日历日期指定为朱利安日期,我在Teradata中的方式是:
CAST((TO_CHAR(CURRENT_DATE-1,'J')) AS INT)
我尝试了以下内容:
from_unixtime(unix_timestamp(date_sub(to_date(from_unixtime(unix_timestamp())),1), 'yyyy-MM-dd'),'j')
但是' j'对于配置单元而言,它不是一种有效的模式。
感谢。
修改 我没有尝试使用YYYYddd格式获取朱利安日期,我正试图获得今天14/02/2018为2458164的朱利安日期。
更多编辑 Teradata中的此功能输出朱利安日,这是自公元前4713年12月31日以来的天数。
答案 0 :(得分:2)
使用@âōōXXůŜ的代码解决了这个问题。我只是做了一点改变,使用from_unixtime和unix_timestamp而不是current_date。
ceiling(2
-CAST(IF(MONTH(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd')))<=2, YEAR(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd')))-1,YEAR(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd'))))/100 AS INT)
+CAST(CAST(IF(MONTH(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd')))<=2, YEAR(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd')))-1,YEAR(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd'))))/100 AS INT)/4 AS INT)
+DAY(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd')))
+CAST(365.25*(IF(MONTH(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd')))<=2,YEAR(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd')))-1, YEAR(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd'))))+4716) AS INT)
+CAST(30.6001*(IF(MONTH(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd')))<=2, MONTH(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd')))+12, MONTH(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd'))))+1) AS INT)
-1524.5)
我还设置了一个上限函数以避免小数。
答案 1 :(得分:1)
@fernando;我使用此链接来计算它:https://quasar.as.utexas.edu/BillInfo/JulianDatesG.html。请注意,在网站上说(引用):
请注意,这总会给你额外的半天时间。那是因为朱利安日从格林威治时间中午开始。这对天文学家来说很方便(直到最近才在晚上才观察到),但这很令人困惑。
SELECT 2-CAST(IF(MONTH(date_sub(current_date(),1))<=2, YEAR(date_sub(current_date(),1))-1,YEAR(date_sub(current_date(),1)))/100 AS INT)+CAST(CAST(IF(MONTH(date_sub(current_date(),1))<=2, YEAR(date_sub(current_date(),1))-1,YEAR(date_sub(current_date(),1)))/100 AS INT)/4 AS INT)+DAY(date_sub(current_date(),1))+CAST(365.25*(IF(MONTH(date_sub(current_date(),1))<=2,YEAR(date_sub(current_date(),1))-1, YEAR(date_sub(current_date(),1)))+4716) AS INT)+CAST(30.6001*(IF(MONTH(date_sub(current_date(),1))<=2, MONTH(date_sub(current_date(),1))+12, MONTH(date_sub(current_date(),1)))+1) AS INT)-1524.5;
当前日期减去一天:2018年2月13日 结果:2458162.5
此警告(再次引用网站):
警告:以前的公历日期不保证此计算 至1582年,也不是负朱利安日数。
=========以前不正确的答案=======
@fernando,请使用date_sub函数,格式为yyyyDDD。希望这可以帮助。感谢。
Query: select from_unixtime(unix_timestamp(date_sub(current_date, 1),'yyyy-MM-dd'), 'yyyyDDD');
Result: 2018044
where Year: 2018 and J: 044