将具有日期和历元格式值的字符串列转换为postgresql/Tableau prep中的日期列
如何将具有日期和历元格式值的字符串列转换为日期列?我正在一个postgresql/Tableau准备环境中工作 确定此查询的工作方式:将具有日期和历元格式值的字符串列转换为postgresql/Tableau prep中的日期列,postgresql,date,format,amazon-redshift,epoch,Postgresql,Date,Format,Amazon Redshift,Epoch,如何将具有日期和历元格式值的字符串列转换为日期列?我正在一个postgresql/Tableau准备环境中工作 确定此查询的工作方式: SELECT case WHEN len(d.properties__renewal_date__value) > 10 THEN (timestamp 'epoch' + CAST(NULLIF(d.properties__renewal_date__value, '') AS BIGINT)/1000 * interval '1 second')
SELECT case
WHEN len(d.properties__renewal_date__value) > 10
THEN (timestamp 'epoch' + CAST(NULLIF(d.properties__renewal_date__value, '') AS BIGINT)/1000 * interval '1 second')
ELSE to_date(d.properties__renewal_date__value, 'DD/MM/YYYY') end as renewal_date
以下是@AdrianKlaver评论的编码。首先确定与regexp匹配的当前值的类型,然后进行相应的转换
选择案例
当“续订日期”~'^\d+$时,则为时间戳(“续订日期”::双精度)::日期
其他截止日期(“续约日期”,“dd/mm/yyyy”)
以续订日结束
从_表;
红移颜色,历元值(毫秒):
选择案例
当“续订日期”~'^\d+$时,则
('1970-01-01'::日期+(“更新日期”::双精度/1000)*'1秒:::间隔)::日期
其他的
截止日期(“续约日期”,“年月日”)
以续订日结束
从_表;
请将这些值复制并粘贴到您的问题中,而不是使用链接图像。我想说的方法是创建一个新的date
列,并将现有列中的值转换为它。日期格式可以是DD/MM/YYYY::date
。作为时间戳(历元值)的历元:日期。区分它们可能需要用正则表达式来完成,但我不能胜任。这很酷。不过,日期格式值的“截止日期”是不必要的。您只需执行“续订日期”::日期代码>@AdrianKlaver是的,你是对的。我更喜欢使用格式的日期,因为它更安全,因为它不依赖于SET DATESTYLE
配置。这是真的。我尝试了上面的代码,但我得到了以下错误:无效操作:设置时间戳(数字)的函数不存在;你知道为什么吗?我的疏忽。函数定义为到时间戳(双精度)
或完全不转换,而不是数字。请。使用添加时间戳(“续订日期”::双精度)::date
。但我注意到,1553817600000对于epoch来说是一个非常大的值,并产生51208-07-09to_时间戳(“更新日期”::双精度/1000)::日期产生21世纪的日期。可能历元值以毫秒为单位?