SQL2008,表名AA,列名电话卡,当电话卡中有“挪动”或“联通”或“电信”或“数据卡”时,只保留该文字,其余文字删除,求语句
SQL2008,表名AA,列名电话卡,当电话卡中有“移动”或“联通”或“电信”或“数据卡”时,只保留该文字,其余文字删除,求语句?
表名AA
列名:电话卡
广西移动183卡
联通156
云南电信卡
飞马数据卡
想变成下面的格式
列名:电话卡
移动
联通
电信
数据卡
求语句,谢谢!
------解决方案--------------------
------解决方案--------------------
update 表名AA set 电话卡=
CASE
WHEN PATINDEX('%移动%',电话卡)>0 THEN '移动'
WHEN PATINDEX('%联通%',电话卡)>0 THEN '联通'
WHEN PATINDEX('%电信%',电话卡)>0 THEN '电信'
WHEN PATINDEX('%数据卡%',电话卡)>0 THEN '数据卡'
ELSE ''
END
------解决方案--------------------
如果需要判断的情况很多,建议加个字典表来匹配
------解决方案--------------------
不查询,那就是直接update就可以:
表名AA
列名:电话卡
广西移动183卡
联通156
云南电信卡
飞马数据卡
想变成下面的格式
列名:电话卡
移动
联通
电信
数据卡
求语句,谢谢!
------解决方案--------------------
----------------------------------------------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2014-03-18 11:46:24
-- Verstion:
-- Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:34
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([电话卡] varchar(13))
insert [tb]
select '广西移动183卡' union all
select '联通156' union all
select '云南电信卡' union all
select '飞马数据卡'
--------------开始查询--------------------------
SELECT CASE WHEN PATINDEX('%移动%',电话卡)>0 THEN '移动'
WHEN PATINDEX('%联通%',电话卡)>0 THEN '联通'
WHEN PATINDEX('%电信%',电话卡)>0 THEN '电信'
WHEN PATINDEX('%数据卡%',电话卡)>0 THEN '数据卡'
ELSE ''
END FROM tb
----------------结果----------------------------
/* ------
移动
联通
电信
数据卡
(4 行受影响)
*/
------解决方案--------------------
update 表名AA set 电话卡=
CASE
WHEN PATINDEX('%移动%',电话卡)>0 THEN '移动'
WHEN PATINDEX('%联通%',电话卡)>0 THEN '联通'
WHEN PATINDEX('%电信%',电话卡)>0 THEN '电信'
WHEN PATINDEX('%数据卡%',电话卡)>0 THEN '数据卡'
ELSE ''
END
------解决方案--------------------
UPDATE tb
SET [电话卡] = CASE WHEN PATINDEX('%移动%', 电话卡) > 0 THEN '移动'
WHEN PATINDEX('%联通%', 电话卡) > 0 THEN '联通'
WHEN PATINDEX('%电信%', 电话卡) > 0 THEN '电信'
WHEN PATINDEX('%数据卡%', 电话卡) > 0 THEN '数据卡'
ELSE ''
END
如果需要判断的情况很多,建议加个字典表来匹配
------解决方案--------------------
不查询,那就是直接update就可以:
update tb
set [电话卡]=CASE WHEN PATINDEX('%移动%',电话卡)>0 THEN '移动'
WHEN PATINDEX('%联通%',电话卡)>0 THEN '联通'
WHEN PATINDEX('%电信%',电话卡)>0 THEN '电信'
WHEN PATINDEX('%数据卡%',电话卡)>0 THEN '数据卡'
ELSE ''
END