SQL替换函数可以用于多个值吗?

时间:2014-06-11 01:21:40

标签: sql function replace

我在SQL表中有一堆发票,其中有一个名为“Status”的字段。

有两种可能的状态:“P”或“U”。

我想选择所有发票但是,我想将“P”的所有实例替换为“已发布”,将所有“U”实例替换为“未批准”。

以下查询完全符合我的要求,但一次只能执行一条记录。

Replace(Type, 'U', 'Unapproved')

如何让“替换”功能工作,使列中的所有记录都替换为“已发布”或“未批准”?

例如,我想更改此表:

+-----------+--------+
| Invoice # | Status |
+-----------+--------+
| 00001921  | P      |
| 00001932  | P      |
| 0001937   | P      |
| 00890483  | U      |
| 00902945  | U      |
| 08MAY14   | P      |
| 1012      | P      |
| 10619     | P      |
| 10620     | P      |
| 10633     | P      |
| 10641     | P      |
| 130       | P      |
| 1303      | P      |
| 1307      | P      |
| 217731    | U      |
| 2714      | U      |
| 2720      | P      |
| 6523      | P      |
| 712       | P      |
+-----------+--------+

进入这个:

+-----------+------------+
| Invoice # |   Status   |
+-----------+------------+
| 1921      | Posted     |
| 1932      | Posted     |
| 1937      | Posted     |
| 890483    | Unapproved |
| 902945    | Unapproved |
| 8-May-14  | Posted     |
| 1012      | Posted     |
| 10619     | Posted     |
| 10620     | Posted     |
| 10633     | Posted     |
| 10641     | Posted     |
| 130       | Posted     |
| 1303      | Posted     |
| 1307      | Posted     |
| 217731    | Unapproved |
| 2714      | Unapproved |
| 2720      | Posted     |
| 6523      | Posted     |
| 712       | Posted     |
+-----------+------------+

3 个答案:

答案 0 :(得分:2)

使用这两个状态:

Update table set status = 'Unapproved' where status = 'U'

Update table set status = 'Posted' where status = 'P'

听起来你想要一个包含案例的select语句:

SELECT   
  CASE 
     WHEN status =  'P' THEN 'Posted'
     WHEN status = 'U' THEN 'Unapproved'
  END
FROM [table]

答案 1 :(得分:0)

UPDATE SampleTable
SET [Status] = CASE [Status]
    WHEN 'P' THEN 'Posted'
    WHEN 'U' THEN 'Unapproved'
END 


选择

SELECT Invoice, 
    [Status] = CASE [Status]
                WHEN 'P' THEN 'Posted'
                WHEN 'U' THEN 'Unapproved'
                END 
FROM SampleTable

答案 2 :(得分:0)

必须嵌套替换语句。

SELECT `Invoice #`, 
       REPLACE( REPLACE (STATUS, 'U', 'UNAPPROVED') , 'P', 'POSTED') 
       as `STATUS` from Table;

其中Table是您的表的名称。

编辑:不要这样做。