首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >根据条件更改临时表的值

根据条件更改临时表的值
EN

Stack Overflow用户
提问于 2019-07-15 08:16:34
回答 1查看 29关注 0票数 0

我正在使用amazon redshift,我需要在如下所示的临时表中更改名为“code”的列的值。

代码语言:javascript
复制
id   code
---  ----
1    99990
2    A0002
3    0000F

我需要检查第一个和最后一个字符是否为数字,如果它们都是数字,则根据其范围更改列值(例如,当90000 <代码<99999时,设置code = 'category1‘)。

如果最后一个字符是字母表,则根据前4个字符的范围设置代码(例如,当0<代码:4<1000时设置代码= "category2“)

我现在有的是:

代码语言:javascript
复制
UPDATE tmp_table
SET code = 'category1'
WHERE substring(code,1,1) ~ '[0-9]' 
AND 90000 <= CONVERT(INT,code) <= 99999 ;

然而,我得到的错误代码,如'A0002‘,错误信息是:无效的操作,无效的数字,值'A’。

我怀疑原因是当它没有满足第一个条件时,在第二个条件中,转换函数不能接受非数字值,从而引发了错误。但我不确定如何解决这个问题并得到我想要的东西。有什么建议吗?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-15 08:56:19

表达式的求值顺序是不确定的。它们可以以任何顺序进行评估。

要解决此问题,请使用case

代码语言:javascript
复制
UPDATE tmp_table
    SET code = 'category1'
WHERE (CASE WHEN code ~ '[0-9]+'
            THEN CONVERT(INT, code) BETWEEN 90000 AND 99999
       END);

或者,忘记转换,只使用字符串逻辑:

代码语言:javascript
复制
WHERE CODE ~ '^9[0-9]{4}$'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57032066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档