Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将具有日期和历元格式值的字符串列转换为postgresql/Tableau prep中的日期列_Postgresql_Date_Format_Amazon Redshift_Epoch - Fatal编程技术网

将具有日期和历元格式值的字符串列转换为postgresql/Tableau prep中的日期列

将具有日期和历元格式值的字符串列转换为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')

如何将具有日期和历元格式值的字符串列转换为日期列?我正在一个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')
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-09
to_时间戳(“更新日期”::双精度/1000)::日期产生21世纪的日期。可能历元值以毫秒为单位?