我需要更改select语句返回的值。当前,当我选择某个列时,返回的值是'1','2'或NULL。我想返回一个不同的值代替“ 1”和“ 2”,例如“ 18”。我尝试使用translate
函数无济于事。用postgresql如何完成?
当前正在尝试:
.select("concat_ws(',',translate(e110618,'12','18'),e110717,e110519)")
当我删除翻译时,它可以工作,但是输出(1,2,1)不是我所需要的。
我认为translate()
并不是您真正需要的。它会执行基于字符的搜索/替换,而您似乎希望匹配整个字符串。
您可以改用case
表达式。这是适用于大多数RDBMS的标准SQL。
case when e110618 in ('1','2') then 18 else e110618 end
如果1和2之外唯一可能的其他值为null
,则可以简化,因为case
默认返回null
:
case when e110618 in ('1','2') then 18 end
注意:如果e110618
是数字数据类型(而不是字符串),则应删除1
和2
周围的单引号。
在您的代码中:
select(
"concat_ws(',',case when e110618 in ('1','2') then 18 end,e110717,e110519)"
)