分割字符串
本来想用split函数,但在查询分析器中中文都变成了“?”,没办法,只能一步步来了。
declare @chvString varchar(100)
set @chvString='经济类型:120 生产产值:30-50万 人员数量:17人 开业年份:1998'
declare @a varchar(10),@b varchar(10),@c varchar(10),@d varchar(10)
declare @start int,@end intset @start=CHARINDEX(':',@chvString)
set @end=CHARINDEX(' ',@chvString)
set @a=substring(@chvString,@start+1,@end-@start)
set @chvString=Ltrim(Right(@chvString,len(@chvString)-@end))set @start=CHARINDEX(':',@chvString)
set @end=CHARINDEX(' ',@chvString)
set @b=substring(@chvString,@start+1,@end-@start)
set @b=Left(@b,len(@b)-1)
set @chvString=Ltrim(Right(@chvString,len(@chvString)-@end))set @start=CHARINDEX(':',@chvString)
set @end=CHARINDEX(' ',@chvString)
set @c=substring(@chvString,@start+1,@end-@start)
set @c=Left(@c,len(@c)-1)
set @chvString=Ltrim(Right(@chvString,len(@chvString)-@end))set @d=Right(@chvString,4)select @a as 经济类型,@b as 生产产值,@c as 人员数量,@d as 开业年份
得到结果-----------------
经济类型 生产产值 人员数量 开业年份
---------- ---------- ---------- ----------
120 30-50 17 1998
用游标取出Re字段,分割后插入到新的数据库
本来想用split函数,但在查询分析器中中文都变成了“?”,没办法,只能一步步来了。
declare @chvString varchar(100)
set @chvString='经济类型:120 生产产值:30-50万 人员数量:17人 开业年份:1998'
declare @a varchar(10),@b varchar(10),@c varchar(10),@d varchar(10)
declare @start int,@end intset @start=CHARINDEX(':',@chvString)
set @end=CHARINDEX(' ',@chvString)
set @a=substring(@chvString,@start+1,@end-@start)
set @chvString=Ltrim(Right(@chvString,len(@chvString)-@end))set @start=CHARINDEX(':',@chvString)
set @end=CHARINDEX(' ',@chvString)
set @b=substring(@chvString,@start+1,@end-@start)
set @b=Left(@b,len(@b)-1)
set @chvString=Ltrim(Right(@chvString,len(@chvString)-@end))set @start=CHARINDEX(':',@chvString)
set @end=CHARINDEX(' ',@chvString)
set @c=substring(@chvString,@start+1,@end-@start)
set @c=Left(@c,len(@c)-1)
set @chvString=Ltrim(Right(@chvString,len(@chvString)-@end))set @d=Right(@chvString,4)select @a as 经济类型,@b as 生产产值,@c as 人员数量,@d as 开业年份
得到结果-----------------
经济类型 生产产值 人员数量 开业年份
---------- ---------- ---------- ----------
120 30-50 17 1998
用游标取出Re字段,分割后插入到新的数据库
解决方案 »
- 求帮助。。。。在线等。sa登陆问题
- 这样建表好不好
- 为什么拼凑的sql语句可以被注入??
- 触发器。外键删除。
- 我的操作系统是xp pro sp2,为什么装不了sql server 2000?
- 把日期转为 yyyy-mm-dd 时间转为 yyyy-mm-dd hh:mm:ss 格式的SQL CONVERT(SJ,值) 怎么写
- 极其怪的问题 insert 目标表 select * from 源表
- 已经安装了MSDE,能否再安装MS SQL 2000?
- 关于两张表查询问题
- 求SQL语句
- 简单问题:OpenDataSource问题????急,在线等!!!!!!!!!!!
- 大侠救命,将三个表中的数据同时插入一个表中,应该怎么写啊,拜托了!
RETURNS @returnTable TABLE(value1 VARCHAR(20), value2 VARCHAR(20), value3 VARCHAR(20), value4 VARCHAR(20))
ASBEGINDECLARE @thisSplitStr VARCHAR(20)
DECLARE @thisSepIndex INT
DECLARE @lastSepIndex INTDECLARE @value1 AS VARCHAR(20)
DECLARE @value2 AS VARCHAR(20)
DECLARE @value3 AS VARCHAR(20)
DECLARE @value4 AS VARCHAR(20)
DECLARE @i AS INTSET @value1 = ''
SET @value2 = ''
SET @value3 = ''
SET @value4 = ''
SET @i = 1
SET @splitString = REPLACE(@splitString, '经济类型', '')
SET @splitString = REPLACE(@splitString, '生产产值', '')
SET @splitString = REPLACE(@splitString, '人员数量', '')
SET @splitString = REPLACE(@splitString, '开业年份', '')
SET @splitString = REPLACE(@splitString, '万', '')
SET @splitString = REPLACE(@splitString, '人', '')
SET @splitString = SUBSTRING(@splitString, 2, LEN(@splitString))
SET @splitString = LTRIM(RTRIM(@splitString))SET @lastSepIndex = 0IF RIGHT(@splitString ,LEN(@separate)) <> @separate SET @splitString = @splitString + @separate
SET @thisSepIndex = CHARINDEX(@separate,@splitString ,@lastSepIndex)WHILE @lastSepIndex <= @thisSepIndex
BEGIN
SET @thisSplitStr = SUBSTRING(@splitString ,@lastSepIndex,@thisSepIndex-@lastSepIndex)
SET @lastSepIndex = @thisSepIndex + 1
SET @thisSepIndex = CHARINDEX(@separate,@splitString ,@lastSepIndex)
IF @i % 4 = 1
SET @value1 = @thisSplitStr
IF @i % 4 = 2
SET @value2 = @thisSplitStr
IF @i % 4 = 3
SET @value3 = @thisSplitStr
IF @i % 4 = 0
SET @value4 = @thisSplitStr
IF @i % 4 = 0
INSERT INTO @returnTable VALUES(@value1, @value2, @value3, @value4)
SET @i = @i + 1
END
RETURNEND--调用DECLARE @Str AS VARCHAR(1000)SET @Str = '经济类型:120 生产产值:30-50万 人员数量:17人 开业年份:1998
经济类型:159 生产产值:30-50万 人员数量:14人 开业年份:1997
经济类型:120 生产产值:30-50万 人员数量:6人 开业年份:1997
经济类型:120 生产产值:0-30万 人员数量:5人 开业年份:1993'SELECT * FROM dbo.SplitRe(@Str, ':')/*
结果如下:
val1 val2 val3 val4
120 30-50 17 1998
159 30-50 14 1997
120 30-50 6 1997
120 0-30 5 1993(4 row(s) affected)
*/
declare @tmpA Table
(
id int IDENTITY(1,1) PRIMARY KEY,
re varchar(100)
)
insert into @tmpA values('经济类型:120 生产产值:30-50万 人员数量:17人 开业年份:1998')
insert into @tmpA values('经济类型:159 生产产值:30-50万 人员数量:14人 开业年份:1997')
insert into @tmpA values('经济类型:120 生产产值:30-50万 人员数量:6人 开业年份:1997')
insert into @tmpA values('经济类型:120 生产产值:0-30万 人员数量:5人 开业年份:1993')
--显示表A
select * from @tmpA
--定义表Re
declare @tmpRe Table
(
id int IDENTITY(1,1) PRIMARY KEY,
A_id int,
Val1 varchar(10),
Val2 varchar(10),
Val3 varchar(10),
Val4 varchar(10)
)
--使用游标
declare P1 cursor for
select * from @tmpA
declare @id int,@re varchar(1000)
declare @a varchar(10),@b varchar(10),@c varchar(10),@d varchar(10)
declare @start int,@end int
Open P1
Fetch Next From P1 Into @id,@re
While @@Fetch_status=0
Begin
--经济类型
set @start=CHARINDEX(':',@re)
set @end=CHARINDEX(' ',@re)
set @a=substring(@re,@start+1,@end-@start)
set @re=Ltrim(Right(@re,len(@re)-@end))
--生产产值
set @start=CHARINDEX(':',@re)
set @end=CHARINDEX(' ',@re)
set @b=substring(@re,@start+1,@end-@start)
set @b=Left(@b,len(@b)-1)
set @re=Ltrim(Right(@re,len(@re)-@end))
--人员数量
set @start=CHARINDEX(':',@re)
set @end=CHARINDEX(' ',@re)
set @c=substring(@re,@start+1,@end-@start)
set @c=Left(@c,len(@c)-1)
set @re=Ltrim(Right(@re,len(@re)-@end))
--开业年份
set @d=Right(@re,4)
Insert into @tmpRe values(@id,@a,@b,@c,@d)
Fetch Next From P1 Into @id,@re
End
Close P1
Deallocate P1
--显示表Re
select * from @tmpRe-----------------
-----------------
-----------------
显示结果
表A
id re
----------- ------------------------------------------------------------------------
1 ????:120 ????:30-50? ????:17? ????:1998
2 ????:159 ????:30-50? ????:14? ????:1997
3 ????:120 ????:30-50? ????:6? ????:1997
4 ????:120 ????:0-30? ????:5? ????:1993
表Re
id A_id Val1 Val2 Val3 Val4
----------- ----------- ---------- ---------- ---------- ----------
1 1 120 30-50 17 1998
2 2 159 30-50 14 1997
3 3 120 30-50 6 1997
4 4 120 0-30 5 1993