我有一个数据库表,其中时间戳如下所示:
时间
85000
91000
171500
171500
我怎样才能把它变成类似的东西
0850
1715
...?
此值的定义长度始终为 6,因此我需要使用 trim(我猜)以便首先确定时间是否在 10:00 之前,反之亦然。
用左或右切割值不会立即帮助,而且,由于 odbc 到 as400 上的 DB2,我没有所有的 sql 命令,所以这也是一个无赖。
这是另一种工作方式:
left(digits(timestamp),4)
请注意,时间戳实际上不是时间戳,而是十进制 (6,0) 值。这也适用于 0015 或 0001 等时间,在这些时间中,您需要 concat('000000',时间戳)才能在午夜后的第一个小时内工作。
我现在设法了,似乎可以按预期工作:
left(right(concat('0',timestamp),6),4) as formatted_time
我首先在开头加了一个零:
concat('0',timestamp)**
为了长度为 6 也对于小于 10:00 的时间戳。
然后我从右边
抓住了所有六个字符
right(concat('0',timestamp),6)
最后是这个新结果
的前 4 个字符
left(right(concat('0',timestamp),6),4)
并得到了
0600
0945
1315
我知道这不是最优雅或最有效的解决方案。当然,我非常感谢进一步的投入。