如题.。
小弟请教大侠们: 如何截取表中某字段(该字段包含英文、数字、汉字等等),现在想做的就是将这字段中汉字前面的数据截取出来添加到另外一个字段里面去.。
请使用SQL SERVER 数据库.。 小弟先谢谢了.。 很急。 麻烦大家了.。 不会的帮忙顶一下.。
小弟请教大侠们: 如何截取表中某字段(该字段包含英文、数字、汉字等等),现在想做的就是将这字段中汉字前面的数据截取出来添加到另外一个字段里面去.。
请使用SQL SERVER 数据库.。 小弟先谢谢了.。 很急。 麻烦大家了.。 不会的帮忙顶一下.。
CREATE function dbo.F_Get_No
(
@No varchar(100)
)
RETURNS INT
AS
BEGIN
WHILE PATINDEX('%[^0-9]%',@No)>0
BEGIN
SET @No=STUFF(@No,PATINDEX('%[^0-9]%',@No),1,'')
END
RETURN CONVERT(INT,@No)
END 一个函数解决问题。
IF OBJECT_ID('DBO.GET_NUMBER2') IS NOT NULL
DROP FUNCTION DBO.GET_NUMBER2
GO
CREATE FUNCTION DBO.GET_NUMBER2(@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^0-9]%',@S) > 0
BEGIN
set @s=stuff(@s,patindex('%[^0-9]%',@s),1,'')
END
RETURN @S
END
GO
--测试
PRINT DBO.GET_NUMBER('呵呵ABC123ABC')
GO
--123
--------------------------------------------------------------------
--提取英文
IF OBJECT_ID('DBO.GET_STR') IS NOT NULL
DROP FUNCTION DBO.GET_STR
GO
CREATE FUNCTION DBO.GET_STR(@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^a-z]%',@S) > 0
BEGIN
set @s=stuff(@s,patindex('%[^a-z]%',@s),1,'')
END
RETURN @S
END
GO
--测试
PRINT DBO.GET_STR('呵呵ABC123ABC')
GO
--------------------------------------------------------------------
--提取中文
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 PATINDEX('%[^吖-座]%',@S) > 0
SET @S = STUFF(@S,PATINDEX('%[^吖-座]%',@S),1,N'')
RETURN @S
END
GO
PRINT DBO.CHINA_STR('呵呵ABC123ABC')
GO
insert into tb values('100平方米')
insert into tb values('120平方米')
insert into tb values('70-80平方米')
go
--建立如下函数
go
create function getnewstr(@oldstr varchar(100)) returns varchar(100)
as
begin
declare @i int
set @i = 1
while @i <= len(@oldstr)
if substring(@oldstr, @i, 1) like('[^吖-咗]')
set @oldstr = replace(@oldstr, substring(@oldstr, @i, 1), '')
else
set @i = @i +1
return @oldstr
end
goselect area = dbo.getnewstr(area) from tb where area like('%[^吖-咗]%')
/*
area
-------------------------------------
平方米
平方米
平方米(所影响的行数为 3 行)
*/drop table tb
drop function dbo.getnewstr
比如有下表:
id content strContent
1 12asd@1a啊哦1 12asd@1a
2 asd2,21嘿嘿a asd2,21
3 asd21a..哇哦a2 asd21a..懂了? 就是把content字段里的汉字前面的数据截取出来添加到strContent字段里去
go
if object_id('test.dbo.tb') is not null drop table tb
-- 创建数据表
create table tb
(
id int,
content nvarchar(20),
strContent nvarchar(20)
)
go
--插入测试数据
insert into tb select 1,N'12asd@1a啊哦1',null
union all select 2,N'asd2,21嘿嘿a',null
union all select 3,N'asd21a..哇哦a2',null
go
--代码实现update tb set strContent=substring([content],1,PATINDEX('%[吖-座]%',[content])-1)select * from tb/*测试结果id content strContent
----------------------------------
1 12asd@1a啊哦1 12asd@1a
2 asd2,21嘿嘿a asd2,21
3 asd21a..哇哦a2 asd21a..(3 行受影响)
*/
drop table tb
create table tb(name varchar(100) ,address varchar(50))
insert into tb
select '23489很好xyz','北京' union all
select '323455最好rmz','上海'
--查询表
select * from tb
--添加数字
select left([name],(patindex('%[很-最]%',[name])-1))as'col' from tb
insert into tb (address) select left([name],(patindex('%[很-最]%',[name])-1)) from
if object_id('tb') is not null
drop table tb
create table tb(name varchar(100) ,address varchar(50))
insert into tb
select '23489很好xyz','北京' union all
select '323455最好rmz','上海'
--查询表
select * from tb
--添加数字
select left([name],(patindex('%[很-最]%',[name])-1))as'col' from tb
insert into tb (address) select left([name],(patindex('%[很-最]%',[name])-1)) from tb
弱弱的问一下,['%吖-坐%']表达式里面的吖和坐是随便什么字吧? 只要是a和z打出来的字吧?还有,,非常感谢楼上的各位大哥的帮助.。 结账咯