创建函数CREATE function [dbo].[f_get_hz](@str nvarchar(4000)) returns nvarchar(4000) as begin declare @word nchar(1),@hz nvarchar(4000) set @hz='' while len(@str)>0 begin set @word=left(@str,1) --如果非汉字字符,返回'' set @HZ=@HZ+(case when unicode(@word) between 19968 and 19968+20901 then @word else '' end) set @str=right(@str,len(@str)-1) end return @HZ end测试 with t as (select '重庆唯远实业有限公司a' NAME union all select '江苏苏美达船舶工程有限公司#2主' union all select '(上海)启门机电有限公司b' union all select '(Q)小洋人生物乳业集团有限公司' union all select '沈阳鼎冷机电设备有限公司(中国)' union all select '嘉柏(中国)国际货运代理有限公司' union all select '广州宝洁(B)有限公司' union all select '烟台华科食品有限公司c' union all select 'd艾来得机械(上海)有限公司' union all select '(次)(上海)晓舟船舶配件有限公司#1重') SELECT dbo.f_get_hz(REPLACE(NAME,SUBSTRING(NAME,CHARINDEX('(',NAME),CHARINDEX(')',NAME)),'')) NAME FROM (SELECT REPLACE(NAME,SUBSTRING(NAME,CHARINDEX('(',NAME),CHARINDEX(')',NAME)),'') NAME FROM T) ANAME ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 重庆唯远实业有限公司 江苏苏美达船舶工程有限公司 主 启门机电有限公司 小洋人生物乳业集团有限公司 沈阳鼎冷机电设备有限公司 嘉柏货运代理有限公司 广州宝洁 烟台华科食品有限公司 艾来得机械 晓舟船舶配件有限公司 重(10 行受影响)
步骤1:建个函数: create function [dbo].[m_getchinese] ( @chinese nvarchar(max) ) returns nvarchar(100) as begin while patindex('%[^吖-咗]%',@chinese) > 0 begin set @chinese = stuff(@chinese,patindex('%[^吖-咗]%',@chinese),1,N''); end return @chinese end go 步骤2:执行下面的语句,把表名、列名替换成你的数据库中对应的: select [dbo].[m_getchinese](REPLACE(SUBSTRING(SUBSTRING(name,0,PATINDEX('%(%',name))+SUBSTRING(name,PATINDEX('%)%',name)+1,LEN(name)),0,PATINDEX('%(%',SUBSTRING(name,0,PATINDEX('%(%',name))+SUBSTRING(name,PATINDEX('%)%',name)+1,LEN(name))))+SUBSTRING(SUBSTRING(name,0,PATINDEX('%(%',name))+SUBSTRING(name,PATINDEX('%)%',name)+1,LEN(SUBSTRING(name,0,PATINDEX('%(%',name))+SUBSTRING(name,PATINDEX('%)%',name)+1,LEN(name)))),PATINDEX('%)%',SUBSTRING(name,0,PATINDEX('%(%',name))+SUBSTRING(name,PATINDEX('%)%',name)+1,LEN(name)))+1,LEN(SUBSTRING(name,0,PATINDEX('%(%',name))+SUBSTRING(name,PATINDEX('%)%',name)+1,LEN(name)))),'#','')) from [HUANG]
额,有空格,自己在函数里用replace去掉空格
我要是把这一列更新到同一个表的另一列中 就是 update tb set 列2 = ?
update tb set 列2 =上面select的那串东西
---------------------------------------------------------------- -- Author :fredrickhu(小F,向高手学习) -- Date :2014-03-26 14:00:59 -- 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]([col] varchar(34)) insert [tb] select '重庆唯远实业有限公司a' union all select '江苏苏美达船舶工程有限公司#2主' union all select '(上海)启门机电有限公司b' union all select '(Q)小洋人生物乳业集团有限公司' union all select '沈阳鼎冷机电设备有限公司(中国)' union all select '嘉柏(中国)国际货运代理有限公司' union all select '广州宝洁(B)有限公司' union all select '烟台华科食品有限公司c' union all select 'd艾来得机械(上海)有限公司' union all select '(次)(上海)晓舟船舶配件有限公司#1重' --------------开始查询-------------------------- IF OBJECT_ID('DBO.CHINA_STR') IS NOT NULL DROP FUNCTION DBO.CHINA_STR GO CREATE FUNCTION DBO.CHINA_STR(@S NVARCHAR(100)) RETURNS VARCHAR(100) AS BEGIN WHILE CHARINDEX('(',@s)>0 OR CHARINDEX(')',@s)>0 SET @s=REPLACE(@s,SUBSTRING(@s,CHARINDEX('(',@s),CHARINDEX(')',@s)-CHARINDEX('(',@s)+1),'') WHILE PATINDEX('%[^吖-做]%',@S) > 0 SET @S = STUFF(@S,PATINDEX('%[^吖-做]%',@S),1,N'') RETURN @S END GO SELECT DBO.CHINA_STR(col) FROM tb GO ----------------结果---------------------------- /* 重庆唯远实业有限公司 江苏苏美达船舶工程有限公司主 启门机电有限公司 小洋人生物乳业集团有限公司 沈阳鼎冷机电设备有限公司 嘉柏国际货运代理有限公司 广州宝洁有限公司 烟台华科食品有限公司 艾来得机械有限公司 晓舟船舶配件有限公司重*/
select 出来的数据有很多条,不能用 =
---------------------------------------------------------------- -- Author :fredrickhu(小F,向高手学习) -- Date :2014-03-26 14:00:59 -- 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]([col] varchar(34)) insert [tb] select '重庆唯远实业有限公司a' union all select '江苏苏美达船舶工程有限公司#2主' union all select '(上海)启门机电有限公司b' union all select '(Q)小洋人生物乳业集团有限公司' union all select '沈阳鼎冷机电设备有限公司(中国)' union all select '嘉柏(中国)国际货运代理有限公司' union all select '广州宝洁(B)有限公司' union all select '烟台华科食品有限公司c' union all select 'd艾来得机械(上海)有限公司' union all select '(次)(上海)晓舟船舶配件有限公司#1重' --------------开始查询-------------------------- IF OBJECT_ID('DBO.CHINA_STR') IS NOT NULL DROP FUNCTION DBO.CHINA_STR GO CREATE FUNCTION DBO.CHINA_STR(@S NVARCHAR(100)) RETURNS VARCHAR(100) AS BEGIN WHILE CHARINDEX('(',@s)>0 OR CHARINDEX(')',@s)>0 OR CHARINDEX('#',@s)>0 SET @s=REPLACE(REPLACE(@s,SUBSTRING(@s,CHARINDEX('(',@s),CHARINDEX(')',@s)-CHARINDEX('(',@s)+1),''),SUBSTRING(@s,CHARINDEX('#',@s),LEN(@s)-CHARINDEX('#',@s)+1),'') WHILE PATINDEX('%[^吖-做]%',@S) > 0 SET @S = STUFF(@S,PATINDEX('%[^吖-做]%',@S),1,N'') RETURN @S END GO SELECT DBO.CHINA_STR(col) FROM tb GO ----------------结果---------------------------- /*重庆唯远实业有限公司 江苏苏美达船舶工程有限公司 启门机电有限公司 小洋人生物乳业集团有限公司 沈阳鼎冷机电设备有限公司 嘉柏国际货运代理有限公司 广州宝洁有限公司 烟台华科食品有限公司 艾来得机械有限公司 晓舟船舶配件有限公司 */
returns nvarchar(4000)
as
begin
declare @word nchar(1),@hz nvarchar(4000)
set @hz=''
while len(@str)>0
begin
set @word=left(@str,1)
--如果非汉字字符,返回''
set @HZ=@HZ+(case when unicode(@word) between 19968 and 19968+20901
then @word else '' end)
set @str=right(@str,len(@str)-1)
end
return @HZ
end测试
with t as
(select '重庆唯远实业有限公司a' NAME
union all
select '江苏苏美达船舶工程有限公司#2主'
union all
select '(上海)启门机电有限公司b'
union all
select '(Q)小洋人生物乳业集团有限公司'
union all
select '沈阳鼎冷机电设备有限公司(中国)'
union all
select '嘉柏(中国)国际货运代理有限公司'
union all
select '广州宝洁(B)有限公司'
union all
select '烟台华科食品有限公司c'
union all
select 'd艾来得机械(上海)有限公司'
union all
select '(次)(上海)晓舟船舶配件有限公司#1重')
SELECT dbo.f_get_hz(REPLACE(NAME,SUBSTRING(NAME,CHARINDEX('(',NAME),CHARINDEX(')',NAME)),'')) NAME FROM
(SELECT REPLACE(NAME,SUBSTRING(NAME,CHARINDEX('(',NAME),CHARINDEX(')',NAME)),'') NAME FROM T) ANAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
重庆唯远实业有限公司
江苏苏美达船舶工程有限公司 主
启门机电有限公司
小洋人生物乳业集团有限公司
沈阳鼎冷机电设备有限公司
嘉柏货运代理有限公司
广州宝洁
烟台华科食品有限公司
艾来得机械
晓舟船舶配件有限公司 重(10 行受影响)
create function [dbo].[m_getchinese]
(
@chinese nvarchar(max)
)
returns nvarchar(100)
as
begin
while patindex('%[^吖-咗]%',@chinese) > 0
begin
set @chinese = stuff(@chinese,patindex('%[^吖-咗]%',@chinese),1,N'');
end
return @chinese
end
go
步骤2:执行下面的语句,把表名、列名替换成你的数据库中对应的:
select [dbo].[m_getchinese](REPLACE(SUBSTRING(SUBSTRING(name,0,PATINDEX('%(%',name))+SUBSTRING(name,PATINDEX('%)%',name)+1,LEN(name)),0,PATINDEX('%(%',SUBSTRING(name,0,PATINDEX('%(%',name))+SUBSTRING(name,PATINDEX('%)%',name)+1,LEN(name))))+SUBSTRING(SUBSTRING(name,0,PATINDEX('%(%',name))+SUBSTRING(name,PATINDEX('%)%',name)+1,LEN(SUBSTRING(name,0,PATINDEX('%(%',name))+SUBSTRING(name,PATINDEX('%)%',name)+1,LEN(name)))),PATINDEX('%)%',SUBSTRING(name,0,PATINDEX('%(%',name))+SUBSTRING(name,PATINDEX('%)%',name)+1,LEN(name)))+1,LEN(SUBSTRING(name,0,PATINDEX('%(%',name))+SUBSTRING(name,PATINDEX('%)%',name)+1,LEN(name)))),'#',''))
from [HUANG]
我要是把这一列更新到同一个表的另一列中 就是 update tb set 列2 = ?
-- Author :fredrickhu(小F,向高手学习)
-- Date :2014-03-26 14:00:59
-- 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]([col] varchar(34))
insert [tb]
select '重庆唯远实业有限公司a' union all
select '江苏苏美达船舶工程有限公司#2主' union all
select '(上海)启门机电有限公司b' union all
select '(Q)小洋人生物乳业集团有限公司' union all
select '沈阳鼎冷机电设备有限公司(中国)' union all
select '嘉柏(中国)国际货运代理有限公司' union all
select '广州宝洁(B)有限公司' union all
select '烟台华科食品有限公司c' union all
select 'd艾来得机械(上海)有限公司' union all
select '(次)(上海)晓舟船舶配件有限公司#1重'
--------------开始查询--------------------------
IF OBJECT_ID('DBO.CHINA_STR') IS NOT NULL
DROP FUNCTION DBO.CHINA_STR
GO
CREATE FUNCTION DBO.CHINA_STR(@S NVARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE CHARINDEX('(',@s)>0 OR CHARINDEX(')',@s)>0
SET @s=REPLACE(@s,SUBSTRING(@s,CHARINDEX('(',@s),CHARINDEX(')',@s)-CHARINDEX('(',@s)+1),'')
WHILE PATINDEX('%[^吖-做]%',@S) > 0
SET @S = STUFF(@S,PATINDEX('%[^吖-做]%',@S),1,N'')
RETURN @S
END
GO
SELECT DBO.CHINA_STR(col) FROM tb
GO
----------------结果----------------------------
/* 重庆唯远实业有限公司
江苏苏美达船舶工程有限公司主
启门机电有限公司
小洋人生物乳业集团有限公司
沈阳鼎冷机电设备有限公司
嘉柏国际货运代理有限公司
广州宝洁有限公司
烟台华科食品有限公司
艾来得机械有限公司
晓舟船舶配件有限公司重*/
select 出来的数据有很多条,不能用 =
-- Author :fredrickhu(小F,向高手学习)
-- Date :2014-03-26 14:00:59
-- 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]([col] varchar(34))
insert [tb]
select '重庆唯远实业有限公司a' union all
select '江苏苏美达船舶工程有限公司#2主' union all
select '(上海)启门机电有限公司b' union all
select '(Q)小洋人生物乳业集团有限公司' union all
select '沈阳鼎冷机电设备有限公司(中国)' union all
select '嘉柏(中国)国际货运代理有限公司' union all
select '广州宝洁(B)有限公司' union all
select '烟台华科食品有限公司c' union all
select 'd艾来得机械(上海)有限公司' union all
select '(次)(上海)晓舟船舶配件有限公司#1重'
--------------开始查询--------------------------
IF OBJECT_ID('DBO.CHINA_STR') IS NOT NULL
DROP FUNCTION DBO.CHINA_STR
GO
CREATE FUNCTION DBO.CHINA_STR(@S NVARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE CHARINDEX('(',@s)>0 OR CHARINDEX(')',@s)>0 OR CHARINDEX('#',@s)>0
SET @s=REPLACE(REPLACE(@s,SUBSTRING(@s,CHARINDEX('(',@s),CHARINDEX(')',@s)-CHARINDEX('(',@s)+1),''),SUBSTRING(@s,CHARINDEX('#',@s),LEN(@s)-CHARINDEX('#',@s)+1),'')
WHILE PATINDEX('%[^吖-做]%',@S) > 0
SET @S = STUFF(@S,PATINDEX('%[^吖-做]%',@S),1,N'')
RETURN @S
END
GO
SELECT DBO.CHINA_STR(col) FROM tb
GO
----------------结果----------------------------
/*重庆唯远实业有限公司
江苏苏美达船舶工程有限公司
启门机电有限公司
小洋人生物乳业集团有限公司
沈阳鼎冷机电设备有限公司
嘉柏国际货运代理有限公司
广州宝洁有限公司
烟台华科食品有限公司
艾来得机械有限公司
晓舟船舶配件有限公司
*/
update tb
set 列2=DBO.CHINA_STR(col)