【问题标题】:Derive a new column based on Time stamp基于时间戳派生一个新列
【发布时间】:2018-08-30 20:24:17
【问题描述】:

我有一个数据类型为文本的列“customer_date”。

根据我需要派生新列的时间

条件:

  • 当 customer_date


customer_date

01Mar2018 10:03:54
02Mar2018 13:03:54

预期输出

  customer_date             session

01Mar2018 10:03:54        AM
02Mar2018 13:03:54        PM

我写的时候出错了

select 
case EXTRACT(HOUR FROM customer_date)<12 then 'AM' else 'PM' end as session
from my table;

【问题讨论】:

  • 你的代码会产生什么错误?
  • 根据您的previous question,您将timstamp 值转换为text,然后尝试将text 值与timstamp 一起使用? IMO 有点傻。

标签: sql postgresql sql-date-functions sqldatetime


【解决方案1】:

这在我测试时有效:

select (case when EXTRACT(HOUR FROM customer_date::timestamp) < 12 then 'AM' else 'PM' end) as session
from mytable;

我添加了显式转换和when

【讨论】:

    【解决方案2】:

    你忘了在@Gordon Linoff 说的CASE WHEN 中添加WHEN

    有一个简单的方法,使用TO_CHAR 代替CASE WHEN

    使用TO_CHAR

    AM, am, PM or pm 将获得子午线指示符(无句点)

    CREATE TABLE myTable(customer_Date timestamp);
    
    insert into myTable values ('01Mar2018 10:03:54'::timestamp);
    
    insert into myTable values ('02Mar2018 13:03:54'::timestamp);
    

    查询 1

    select customer_Date,TO_CHAR(customer_Date::timestamp, 'AM') as session
    from mytable
    

    Results

    |        customer_date | session |
    |----------------------|---------|
    | 2018-03-01T10:03:54Z |      AM |
    | 2018-03-02T13:03:54Z |      PM |
    

    【讨论】:

      猜你喜欢
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      • 2017-12-22
      • 1970-01-01
      相关资源
      最近更新 更多