首页 > 解决方案 > 将连接文本字符串转换为日期

问题描述

出于某种原因,我正在使用的数据库将日期保存为“YYMMDDHHMM”的文本字符串。我们目前有两个班次,白班从上午 5:00 到下午 4:59 (1659),夜班从下午 5:00 (1700) 到凌晨 4:59。我希望根据使用上述文本字符串的扫描来跟踪每天每个班次的生产力。

我可以使用案例轻松地将这些扫描拆分为它们所属的班次:

case when right(bch.datetime,4) <= 0459 then 'Night'
when right(bch.datetime,4) >= 1700 then 'Night'
when right(bch.datetime,4) between 0500 and 1659 then 'Day'
else '???' end as Shift

问题是夜班被错误地分成了两天,当我把它们组合在一起时。

例如,如果我在 3 月 15 日星期一至 3 月 19 日星期五这周拉取夜班扫描,它们在系统中工作的时间是:

因此,如果我只是按照这些日期进行,我最终会在 15 日进行半天扫描,而不是在 15 日晚上和 16 日早上看到他们的全部生产力。类似地,如果我查看 16 日扫描的所有内容,我真的得到了他们一个班次的后半部分和另一个班次的前半部分。理想情况下,我可以在这里使用另一种情况来返回扫描时间在 0000 和 0459 之间的日期,但是由于日期的格式设置为文本字符串,我不能这样做。

尝试使用:to_date(concat(20, left(b.datetime,6)), 'YYYYMMDD')失败,出现“无效的用户定义或标量函数”错误。不同的版本都导致了相同的错误。只需要将其转换为有效的日期格式。关于如何使用 PSQL 脚本完成这项工作,而不必将原始数据导出到 excel 并从那里进行操作,有什么想法吗?

谢谢!

编辑:尝试使用时出现以下错误to_timestamp(bch.datetime, 'YYMMDDHH24MI')

[LNA][PSQL][SQL Engine]Error in expression: to_timestamp ( bch . datetime, 'YYMMDDHH24MI' ) 
[LNA][PSQL][SQL Engine][Data Record Manager]Invalid user-defined or scalar function.

编辑 2:我使用的 PSQL 版本是 12.10.067。尝试在使用案例之间首先完成简单查询,以获取与两个日期重叠的班次以反映前者. 但是我需要先以日期格式获取日期才能获取前一个日期,所以这就是我的斗争。但即使使用简单的查询,我也会收到上述错误。它可以在没有 to_timestamp 的情况下工作,但不能。我使用的基本查询是:

bch.so_line_no,
bch.lite_no,
bch.department,
bch.piece_no,
bch.datetime,
to_timestamp(bch.datetime, 'YYMMDDHH24MI')

from batch_scan_hist as bch

where left(bch.datetime,6) between '210328' and '210403'

order by bch.datetime```

标签: stringpostgresqldate

解决方案


推荐阅读