SQL,然后,替换

问题描述 投票:0回答:2

在我的查询中收到错误。

case WHEN (I.stackoverflow in 'VBA', 'SQL') 
        THEN replace(I.superuser, '~', '.') 
     WHEN (I.stackoverflow in 'Java', 'design') 
        THEN substr(position_name, (instr(position_name, '_')+2), (len(position_name)-instr(position_name, '_'))) 
     WHEN (I.stackoverflow in 'finance') 
       THEN ((position_name||'.')||currency) 
     WHEN (I.stackoverflow in 'philosophy', 'gaming') 
        THEN ((blah||'.')||currency) 
     WHEN (I.stackoverflow in 'personal finance') 
        THEN cast('text', money) 
     ELSE replace(I.superuser, '~', '.') 
END AS stackexchange

如果我评论出THEN我在WHEN上出现错误(出现在我之后)

错误是:

SQLState:  42601
ErrorCode: 4856

到目前为止,我已经改变了包围方式。在VBA上出现错误,现在I.superuser在我的查询中是红色的。

更新:

case WHEN I.stackoverflow in ('VBA', 'SQL') 
        THEN replace(I.superuser, '~', '.') 
     WHEN I.stackoverflow in ('Java', 'design') 
        THEN substr(position_name, (instr(position_name, '_')+2), (len(position_name)-instr(position_name, '_'))) 
     WHEN I.stackoverflow in ('finance') 
       THEN ((position_name||'.')||currency) 
     WHEN I.stackoverflow in ('philosophy', 'gaming') 
        THEN ((blah||'.')||currency) 
     WHEN I.stackoverflow in ('personal finance') 
        THEN cast('text', money) 
     ELSE replace(I.superuser, '~', '.') 
END AS stackexchange
sql vertica
2个回答
1
投票

您的CASE语句缺少ELSE和END:

select 
    case when I.Stack in ('VBA','SQL','Excel') 
    THEN replace (I.Overflow, '~', '.')
    ELSE <what do you want to do when your case isn't true?>
    END
    AS <it helps to have a column alias for logic like this>
FROM
    sometable AS I

0
投票

如果您正确缩进代码,很容易理解代码无法正常工作的原因。

select 
    case 
        when I.Stack in ('VBA','SQL','Excel') THEN replace (I.Overflow, '~', '.')
    end -- missing
© www.soinside.com 2019 - 2024. All rights reserved.