PostgreSQL如何将字符串转换为具有不同格式的时间戳

huangapple go评论64阅读模式
英文:

Postgresql how to cast string to timestamp with different format

问题

我有一个数据库,其中有一个字符串字段表示日期。
但在这个字段中,日期的格式各不相同……它不是一个固定的格式。
我有这样的格式(我看到了错误和非常可怕的格式……):

  • 2019-05-25 03:40:28
  • 2023-01-07 03:09:57
  • 10/10/2022 12:45

我需要对这个字段进行排序,所以我需要将它转换为时间戳。

因此,当我尝试转换为时间戳时,我得到了一个解析格式的错误。

有没有一种方法可以在没有特定格式的情况下解析?
我应该如何使字段正确格式化?

英文:

I have a database with a field in string which represent a date.
But in this field the date is in different format ... It's not a fix format.
I have format like that (I see wrong and very horrible format ...):

  • 2019-05-25 03: 40:28
  • 2023-01-07 03:09:57
  • 10/10/2022 12:45

I need to do an order by to this field and so I need to cast it in timestamp.

So, when I try to cast to timestamp, I got an error of parse format.

Is there a method to parse without a specific format?
How can I do to have a field correctly formatted?

答案1

得分: 0

我最终检查了数据库中的所有字符串格式,并为每种字符串格式创建了一个CASE,并使用正确的格式执行了'to_timestamp'。以下是我所做的示例:

CASE
     WHEN date ~ '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$' THEN to_timestamp(date,'YYYY-MM-DD HH24:MI:SS')
     WHEN date ~ '^\d{4}-\d{2}-\d{2} \d{2}: \d{2}:\d{2}$' THEN to_timestamp(date,'YYYY-MM-DD HH24: MI:SS')
     ELSE to_timestamp(date,'DD/MM/YYYY HH24:MI')
END formatted_date

有了新的格式化字段,我可以对查询进行排序并根据正确的日期格式执行所需的操作。

英文:

I finally check all string format in the database, and I create a CASE for each string format and I do a 'to_timestamp' with the good format.
This is a sample of what I do:

CASE
     WHEN date ~ '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$' THEN to_timestamp(date,'YYYY-MM-DD HH24:MI:SS')
     WHEN date ~ '^\d{4}-\d{2}-\d{2} \d{2}: \d{2}:\d{2}$' THEN to_timestamp(date,'YYYY-MM-DD HH24: MI:SS')
     ELSE to_timestamp(date,'DD/MM/YYYY HH24:MI')
END formatted_date

With the new formatted field, I can order the query and do what I want with correct date format.

huangapple
  • 本文由 发表于 2023年3月7日 01:04:47
  • 转载请务必保留本文链接:https://go.coder-hub.com/75653748.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定