英文:
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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论