【问题标题】:can NVL return different data type as its argument?NVL 可以返回不同的数据类型作为其参数吗?
【发布时间】:2016-07-27 18:09:20
【问题描述】:

在下面的查询中,

select NVL(gender, 'not available') from member

当性别为空时,我希望查询返回“不可用”。但似乎第二个参数必须与第一个参数的数据类型相同。(在这个例子中,性别是 CHAR(1),但第二个参数是 VARCHAR 或 CHAR(n) 而不是 CHAR(1)。除了更改主表中的数据类型? 我正在使用 Amazon Redshift。 我也在 group by 中使用 nvl 语句,所以我需要尽可能简洁的解决方案。

【问题讨论】:

  • 性别的数据类型是什么?错误是什么?您可以将其转换为 select 中的字符串,而不是更改表中列的类型。
  • 这可能取决于使用的 DB,请为相关 DBMS 添加标签。
  • 使用coalesce()。它是 ANSI 标准版本,可用于更多数据库。
  • 我也尝试过合并。它在红移中不起作用。

标签: sql amazon-redshift nvl


【解决方案1】:

你可以试试case

select case gender when is null then 'not available' else gender 
from my_table 

【讨论】:

  • 是的,它可以,但我想分组使用它,有没有简洁的解决方案?
  • 好吧,你应该发布一个新的正确描述的问题。我无法通过实际问题来想象你的问题,并且在另一个问题中更改一个问题是不公平的。所以如果我的回答是正确的请标记为已接受.. 发布新问题并最终评论我的新链接
【解决方案2】:

这将起作用:

首先找到性别(SELECT gender FROM member WHERE .....)

if gender is null
begin
select 'not available' as result
end
else
begin
<-- do your query-->
end

【讨论】:

  • SQL 中没有if(即使有 - gender 来自哪里?它是表中的一列)
  • 他应该先找到性别(SELECT gender FROM member WHERE .....)而不是运行它。如果没有 IF,我很抱歉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
  • 2023-02-01
  • 1970-01-01
相关资源
最近更新 更多