2017-07-11 20 views
1

有没有办法将日期投射到时间戳。例如,如果我有像2012/05/01这样的日期,我怎样才能将它转换为时间戳,如2012-05-01 00:00:01在pgSQL中投射日期到时间戳

+0

你有没有看过[Postgresql数据类型格式化函数](https://www.postgresql.org/docs/9.6/static/functions-formatting.html)? –

+0

你尝试过哪些工作没有成功。张贴也是。 –

+0

'提取物(年龄)* 12 +提取物(从年龄算起)AS months_between FROM age(TIMESTAMP'2012-06-13 10:38:40',TIMESTAMP'2011-04-30 14:38:40' )' 我有一个日期变量,我需要用日期变量替换这个硬编码的时间戳@LohitGupta –

回答

1

您可以将日期列转换为文本,然后与时间戳的时间部分连接。在下面的查询中,我从当前日期创建一个时间戳。

select (cast(current_date as text) || ' 00:00:01'):: timestamp 
from yourTable; 

或者,如果我们已经有一个日期类型,我们可以简单地添加时间成分:

select current_date + '00:00:01'::time 

输出:

11.07.2017 00:00:01 

Demo

更新:

如果你只是想在几个月的差别两个日期之间,你可以使用以下命令:

DATE_PART('month', AGE(end_date, start_date)) 

当然,这里存在不涉及时间成分,但假设你正在计划分配虚拟00:00:01对两个时间戳,结果都不会改变。

+0

我的存储过程输入变量是start_date和end_date 。但是这给出了一个错误 '提取(年龄)* 12 +提取(月龄从月)AS months_ between FROM age(TIMESTAMP'cast(start_date as text)||'00:00:01'):: timestamp' ,TIMESTAMP'cast(end_date as text)|| '00:00:01'):: timestamp');' –

+0

由于代码错误,导致错误,您在那里有不平衡的引号。也许更新你的问题,让我们知道你为什么需要这样做。通常情况下,你不应该这样形成时间戳。 –

+0

我需要从两个日期中获取月份期间。你能解释一下如何将这两个变量集成到这个代码中吗? –

0

您可以添加部分时间日期

select current_date + '00:00:01'::time 
2

您可以使用此代码,将其转换为timestamp

SELECT current_date::timestamp 

这将直接00:00:00分配时间current_date

+0

它给了我这个错误。end_dates是我的日期变量 '错误:类型时间戳的无效输入语法:“end_dates” SQL状态:22007 上下文:PL/pgSQL函数gettargetreports(date,date) –

1
select cast(current_date as timestamp) + interval '1 second' 

接近标准SQL,只有间隔语法不同interval '1' second