SQL解析有两个,号分隔的字符串方法
2015-12-29 20:38
337 查看
if OBJECT_ID('tempdb..#tb') is not null
drop table #tb;
declare @comText varchar(8000);
create table #tb(transportNo varchar(20),billno varchar(20),price decimal(16,2));
set @comText='150830001001,1,10.00;1508250101,1,12.10;1508290024,3,8.00';
set nocount on;
declare @semicolonlast int,@semicolonCurrent int;
declare @singleCmdText varchar(100);
declare @transportNo varchar(20);
declare @commalast int,@commaFirst int,@commaSecond int;
declare @lastCmdText varchar(100);
declare @billno varchar(20);
declare @price varchar(20);
set @semicolonlast=0;
while 1=1
begin
set @semicolonCurrent=CHARINDEX(';',@comText,@semicolonlast);
if @semicolonCurrent>0
set @singleCmdText=SUBSTRING(@comText,@semicolonlast,@semicolonCurrent-@semicolonlast);
else
set @singleCmdText=SUBSTRING(@comText,@semicolonlast,LEN(@comText)-@semicolonlast+1);
--print @singleCmdText;
set @semicolonlast=@semicolonCurrent+1;
set @commaFirst=0;
set @commaSecond=0;
set @commaFirst=CHARINDEX(',',@singleCmdText,0);
set @commaSecond=CHARINDEX(',',@singleCmdText,@commaFirst+1);
set @transportNo=SUBSTRING(@singleCmdText,0 ,@commaFirst);
set @billno=SUBSTRING(@singleCmdText,@commaFirst+1,@commaSecond-@commaFirst-1);
set @price=SUBSTRING(@singleCmdText,@commaSecond+1,LEN(@singleCmdText)-@commaSecond);
insert #tb(transportNo,billno,price)values(@transportNo,@billno,Convert(decimal,@price));
if @semicolonCurrent=0
break;
end
select * from #tb;
drop table #tb;
declare @comText varchar(8000);
create table #tb(transportNo varchar(20),billno varchar(20),price decimal(16,2));
set @comText='150830001001,1,10.00;1508250101,1,12.10;1508290024,3,8.00';
set nocount on;
declare @semicolonlast int,@semicolonCurrent int;
declare @singleCmdText varchar(100);
declare @transportNo varchar(20);
declare @commalast int,@commaFirst int,@commaSecond int;
declare @lastCmdText varchar(100);
declare @billno varchar(20);
declare @price varchar(20);
set @semicolonlast=0;
while 1=1
begin
set @semicolonCurrent=CHARINDEX(';',@comText,@semicolonlast);
if @semicolonCurrent>0
set @singleCmdText=SUBSTRING(@comText,@semicolonlast,@semicolonCurrent-@semicolonlast);
else
set @singleCmdText=SUBSTRING(@comText,@semicolonlast,LEN(@comText)-@semicolonlast+1);
--print @singleCmdText;
set @semicolonlast=@semicolonCurrent+1;
set @commaFirst=0;
set @commaSecond=0;
set @commaFirst=CHARINDEX(',',@singleCmdText,0);
set @commaSecond=CHARINDEX(',',@singleCmdText,@commaFirst+1);
set @transportNo=SUBSTRING(@singleCmdText,0 ,@commaFirst);
set @billno=SUBSTRING(@singleCmdText,@commaFirst+1,@commaSecond-@commaFirst-1);
set @price=SUBSTRING(@singleCmdText,@commaSecond+1,LEN(@singleCmdText)-@commaSecond);
insert #tb(transportNo,billno,price)values(@transportNo,@billno,Convert(decimal,@price));
if @semicolonCurrent=0
break;
end
select * from #tb;
相关文章推荐
- Redis在linux上的安装
- 【SQL Server】SQL2005的安装与配置、简单使用
- 简单 sql 语句 实用大全
- SQL简介
- pig mysql 写法比较
- MariaDB 通过命令行的方式导出指定数据库和还原指定数据库
- (转) sqlserver,mysql,db2,oracle中判断字段的值不为空
- log4j sql
- mysql中的TIMESTAMP类型时间范围
- .net连接oracle 预编译写法
- SQL多表连接查询
- 创建在SQLServer 和 Oracle的 DBLINK
- Mysql 查询
- oracle学习笔记-用户管理
- 管理数据库和表
- BIEE查看RCU配置的oracle库信息
- 数据库总结2
- 分区表的导入导出 expdp&impdp Oracle 11.2.0.4
- 66.第三方类FMDB(SQL管理数据库)
- sql server 解决union all之后 order by失效的问题