自动填充前导零取决于 SQL 中的长度(DB2 上的 ODBC,带松鼠)



我有一个数据库表,其中时间戳如下所示:

时间

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

我知道这不是最优雅或最有效的解决方案。当然,我非常感谢进一步的投入。

最新更新