在PostgreSQL中为临时变量分配特定的数据类型

时间:2012-11-26 15:32:51

标签: postgresql integer sqldatatypes

我有一个查询,我需要在其他查询中使用查询的结果。所以,我用“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应该以整数数据类型构建,而它们是文本格式。

2 个答案:

答案 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