如果 RedShift 中的字段类型是整数,我如何输入 varchar 值?
How can i enter varchar values in case if the field type is integer in RedShift?
我正在尝试 运行 这个查询:
select count(uid),
case when duration=0 then '0'
when duration between 0 and 10 then '1-10 sec' end as Duration
from mr_session_log
where event_id=10
group by
case when duration=0 then '0'
when duration between 0 and 10 then '1-10 sec' end
但是由于 duration
是整数,Redshift 不允许我在 then
之后输入“1-10 秒”值。
有没有办法输入与原始列值不同的值?
您在列中混合类型的问题。
when duration=0 then 0
returns 一个 整数
when duration between 0 and 10 then '1-10 sec'
returns一个字符串
- 它们都填充相同的
Duration
输出列(与原始 duration
列不同)
我建议您将第一个结果更改为 string
,例如:when duration=0 then '0 sec'
SQL 是一种 强类型 语言。 但我认为我们需要更精确地处理此处的数据类型。我建议:
SELECT 计数(uid)AS ct
, CASE WHEN duration = 0 THEN <b>text '0 sec'</b> -- 字符串文字的显式类型
WHEN duration BETWEEN 1 AND 10 THEN '1-10 sec' -- 强制转换为相同类型
结束持续时间
来自 mr_session_log
其中 event_id = 10
按 2 分组;
您也可以使用 '0 sec'::text
或 cast('0 sec' AS text)
。
在现代 Postgres '0 sec'
甚至没有显式类型的 '0'
中也是如此,因为 字符串文字 在大多数情况下默认为类型 text
上下文。
你 可以 甚至使用 0::text
或 cast(0 AS text)
,但是提供一个字符串作为 数字文字 是没有意义的] 并使 Postgres 转换 两次 (在这种情况下,首先数字文字自动转换为 int
,然后 int
转换为 text
)。
阅读chapter about constants in the Postgres manual。 (我不知道 Redshift 有适当的文档。)
GROUP BY 2
只是引用第二个 SELECT
项的语法 shorthand。如果这不应该在 Redshift 中实现,请像以前一样重复 CASE
表达式。
我正在尝试 运行 这个查询:
select count(uid),
case when duration=0 then '0'
when duration between 0 and 10 then '1-10 sec' end as Duration
from mr_session_log
where event_id=10
group by
case when duration=0 then '0'
when duration between 0 and 10 then '1-10 sec' end
但是由于 duration
是整数,Redshift 不允许我在 then
之后输入“1-10 秒”值。
有没有办法输入与原始列值不同的值?
您在列中混合类型的问题。
when duration=0 then 0
returns 一个 整数when duration between 0 and 10 then '1-10 sec'
returns一个字符串- 它们都填充相同的
Duration
输出列(与原始duration
列不同)
我建议您将第一个结果更改为 string
,例如:when duration=0 then '0 sec'
SQL 是一种 强类型 语言。
SELECT 计数(uid)AS ct
, CASE WHEN duration = 0 THEN <b>text '0 sec'</b> -- 字符串文字的显式类型
WHEN duration BETWEEN 1 AND 10 THEN '1-10 sec' -- 强制转换为相同类型
结束持续时间
来自 mr_session_log
其中 event_id = 10
按 2 分组;
您也可以使用 '0 sec'::text
或 cast('0 sec' AS text)
。
在现代 Postgres '0 sec'
甚至没有显式类型的 '0'
中也是如此,因为 字符串文字 在大多数情况下默认为类型 text
上下文。
你 可以 甚至使用 0::text
或 cast(0 AS text)
,但是提供一个字符串作为 数字文字 是没有意义的] 并使 Postgres 转换 两次 (在这种情况下,首先数字文字自动转换为 int
,然后 int
转换为 text
)。
阅读chapter about constants in the Postgres manual。 (我不知道 Redshift 有适当的文档。)
GROUP BY 2
只是引用第二个 SELECT
项的语法 shorthand。如果这不应该在 Redshift 中实现,请像以前一样重复 CASE
表达式。