【问题标题】:How to change the format of a concat statement如何更改 concat 语句的格式
【发布时间】:2017-03-14 08:49:15
【问题描述】:

我使用 concat 语句在我的 postgresql 数据库中选择开始和结束时间。

代码:

SELECT
     CASE
        WHEN d.id = 4 THEN (SELECT CONCAT (i.start_time,  i.end_time) FROM rdf_date_time i, rdf_condition_dt h WHERE ...) 
        ELSE ''
    END as timedomain
FROM ..
JOIN ...;

开始时间:0500(凌晨 5 点) 结束时间:1300(下午 13 点)

列时域看起来像:5002200

我将这种格式作为结果:[(h5){8}] = [(start_time) {duration until end_time}] 我怎样才能这样转换它?

【问题讨论】:

  • 您必须以正确的模式格式化时间值..但这取决于数据库..所以标记您的数据库模型
  • 这不起作用,因为我的数据库中的 end_time 和 start_time 列是字符。
  • (i.end_time::time-i.start_time::time) then?.. 如果它们是整数,(i.end_time::text::time-i.start_time::text::time)
  • 它被写入了类型时间的无效语法:“500”
  • 我可以转换像'500'这样的时间格式的值吗?

标签: sql postgresql concat


【解决方案1】:

要计算间隔,您应该只从另一个中提取一个时间,例如:

t=# select '0500'::time-'1300'::time diff;
 diff
-----------
 -08:00:00
(1 row)

如果你的列是整数类型,你必须先准备它,像这里:

t=# select lpad(500::text,4,'0')::time;
   lpad
----------
 05:00:00
(1 row)

所以你应该像下面这样工作:

(lpad(i.end_time::text,4,'0')::time - lpad(i.start_time::text,4,'0')::time)

【讨论】:

  • 感谢这正在工作。结果是正确的。我得到 17:00:00。我只需要像在这种情况下只需要'17'或30分钟的小时数我需要'0,3'这可能吗?
猜你喜欢
  • 2013-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-23
  • 2014-11-17
  • 1970-01-01
相关资源
最近更新 更多