cast是否总是从字符串中剪切字符串?

px9o7tmv  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(333)

嗨,我在postgresql中使用了cast函数,其中有一个bigint类型的dayhour列,它包含格式为yyyymmddhh的时间戳(例如2020051912)
所以,实际上我只需要varchar类型中该字段的yyyymmdd(例如20200519)。
CAST(dayhour AS VARCHAR(8)) 缩短日期和时间,并且始终只使用“yyyymmdd”?
你知道更好的方法吗?
编辑:我知道我也可以使用子字符串函数,但想知道这是否像使用子字符串函数一样安全。。。

eqqqjvef

eqqqjvef1#

为什么不自己试试呢?我是为你做的。
似乎这是可能的,虽然这是一个有点奇怪的方式如何做子串。。。
甚至可以将字符串转换为时间戳。

select cast(2020051912::bigint as varchar(8));
select cast('2020051912' as varchar(8));
select cast(2020051912::bigint as varchar(8))::timestamp;
pgx2nnw8

pgx2nnw82#

你可以用 cast() . 我认为 left() 意图更明确:

select left(dayhour::text, 6)

或者,因为这是一个数字:

select floor(dayhour / 100)

(the) floor() 是多余的,因为postgres做整数除法,但我喜欢小心。)
我鼓励你使用适当的 date 价值观。postgres可以轻松地将其转换为日期:

select left(dayhour::text, 6)::date

或者,将值存储为 timestamp 并使用 check 要确保正好是一小时:

check (dayhour = date_trunc('hour', dayhour))

可以添加一个计算列,将其表示为bigint:

alter table t add column day_hour_bigint bigint generated always as 
    (to_char(dayhour, 'YYYYMMDDHH24')::bigint)

相关问题