我有一个查询,我需要在其他查询中使用查询的结果。所以,我用“WITH .. As”。问题是临时变量应该是整数,而它是在文本数据类型中自动创建的。 如何更改或修改代码以使整数数据类型具有变量。
WITH A as (
SELECT ambtemp,
date_trunc('hour', dt)+
CASE WHEN date_part('minute', dt) >= 30
THEN interval '30 minutes'
ELSE interval '0 minutes'
END as t
FROM temm),
B as(
SELECT ambtemp,t,
max(ambtemp) OVER (PARTITION BY t) as max_temp,
min(ambtemp) OVER (PARTITION BY t) as min_temp
FROM A)
SELECT *
FROM B
WHERE (max_temp - min_temp) <= 0.2
max_temp和min_temp应该以整数数据类型构建,而它们是文本格式。
答案 0 :(得分:4)
谢谢,@ Igor Romanchenko
WITH A as (
SELECT ambtemp,
date_trunc('hour', dt)+
CASE WHEN date_part('minute', dt) >= 30
THEN interval '30 minutes'
ELSE interval '0 minutes'
END as t
FROM temm),
B as(
SELECT ambtemp,t,
max(ambtemp::float(23)) OVER (PARTITION BY t) as max_temp,
min(ambtemp::float(23)) OVER (PARTITION BY t) as min_temp
FROM A)
SELECT *
FROM B
WHERE (max_temp - min_temp) <= 0.2
答案 1 :(得分:2)
要更改类型,您需要使用::
运算符强制转换它们。因此,要将整数转换为字符串,您需要执行myCol::Text
。
在您的具体情况下,您正在做相反的事情:
max(ambtemp) OVER (PARTITION BY t) as max_temp::int,
min(ambtemp) OVER (PARTITION BY t) as min_temp::int
您可能希望通过以下方式检查空值:
NULLIF(your_value, '')::int
我也会对不可转换为整数的值保持谨慎。
有关演员表和类型的更多信息,请参阅The PostgreSQL documentation。