如何在PostgreSQL中以不同的方式使用overlay()?

时间:2014-04-04 12:55:20

标签: sql postgresql

我有这样的数据库,我想通过在emp_name字段中检入性别列和覆盖来覆盖该字段。

emp_id | emp_name | gender 
-------+----------+--------
   501 | aaa      | M
   502 | bbb      | F
   503 | ccc      | F
   504 | ddd      | M
   505 | eee      | F

我想要这样的输出

emp_id | emp_name | gender 
-------+----------+--------
   501 | Mr.aaa   | M
   502 | Ms.bbb   | F
   503 | Ms.ccc   | F
   504 | Mr.ddd   | M
   505 | Ms.eee   | F

我曾尝试像这样的选择查询

$select overlay(emp_name placing 'Mr.' from 1 for 0 )  from emp where gender = 'M' ;

我得到了这个输出,

 overlay 
---------
 Mr. aaa
 Mr. ddd
(2 rows)

但是,我没有得到预期的结果。是否有任何预期结果的方法。

先谢谢

3 个答案:

答案 0 :(得分:4)

下面的查询应该给出您期望的输出:

SELECT emp_id
     , CASE WHEN gender = 'M' THEN 'Mr. '
            WHEN gender = 'F' THEN 'Ms. '
            ELSE '' END || emp_name as emp_name
     , gender
  FROM emp;

答案 1 :(得分:2)

$select overlay(emp_name placing CASE gender WHEN 'M' THEN 'Mr. ' ELSE 'Ms. ' END from 1 for 0 )  from emp;

不是postgresql的人,但这应该有用。

答案 2 :(得分:1)

我严格来说是一个TSQL人,但试试这个:

Select CASE WHEN gender = 'M' THEN overlay(emp_name placing 'Mr.' from 1 for 0)
            WHEN gender = 'F' THEN overlay(emp_name placing 'Mrs.' from 1 for 0)
            END AS emp_name
 from emp