表结构:t1 name 名称 varchar(50) gg规格 varchar(20) zl decimal(9,2)重量
钢板 1000 * 500 * 0.8 //就是长度*宽度*厚度 ------------------------------------------------------------------------------------
怎样才能得到zl这个计算列的值,因为gg列的数据类型是字符型,而且用户在录入的时候可能会不区分空格,就是说有这么几种状况:
1.1000*500*0.8
2. 1000 * 500 * 0.8
3. 1000*500 * 0.8
4. 1000 * 500*0.8
等等...
要求做到的是不管用户怎样录入,都可以得到正确的重量值.
钢板 1000 * 500 * 0.8 //就是长度*宽度*厚度 ------------------------------------------------------------------------------------
怎样才能得到zl这个计算列的值,因为gg列的数据类型是字符型,而且用户在录入的时候可能会不区分空格,就是说有这么几种状况:
1.1000*500*0.8
2. 1000 * 500 * 0.8
3. 1000*500 * 0.8
4. 1000 * 500*0.8
等等...
要求做到的是不管用户怎样录入,都可以得到正确的重量值.
解决方案 »
- 如何在存储过程中将查询结果集中的某一字段值(字符串)合并起来?
- myeclipse连接SQLsever 2008
- 删除了windows用户后,SqlServer出现一堆问题
- 这个sql查询应该怎么做
- Where 1=1 影响效率吗?
- 高手指点: 存储过程查当前连接用户个数,如何写?
- 我想把另外的一个数据库的表中的某几个的字段的纪录复制到另外的数据库里。。
- 我的Access文件怎么变成只读了?怎么变回来?
- IF UPDATE (column) 和 IF (COLUMNS_UPDATED()) 的分别?
- 在表中增加数据,加到表中的位置的问题。
- 求sql server 面试题
- 急求一sql语句!在线等!
declare @str varchar(20)
set @str = '1000 * 500 * 0.8'
select cast(left(@str,charindex('*',@str)-1) as dec(9,2))
* cast(substring(@str,charindex('*',@str)+1,charindex('*',@str,charindex('*',@str)+1) - charindex('*',@str) -1) as dec(9,2))
* cast(right(@str,charindex('*',REVERSE(@str))-1) as dec(9,2))结果:
---------------------
400000.000000
---------------------
insert into t1([name],gg)
select 'gangban1','1000* 500 *0.8'
union
select 'gangban2',' 1000 * 500 *0.8 '
union
select 'gangban3',' 1000*500*0.8'
union
select 'xxxxx','200*100*0.1 '
select [name],gg,
cast(Ltrim(Rtrim(left(gg,charindex('*',gg)-1))) as dec(9,2))
*cast( Ltrim(Rtrim(left(stuff(gg,1,charindex('*',gg),''),charindex('*',stuff(gg,1,charindex('*',gg),''))-1))) as dec(9,2))
*cast(Ltrim(Rtrim(right(gg,charindex('*',reverse(gg))-1))) as dec(9,2)) as zl
from t1drop table t1/*The result:*/
name gg zl
-------- -------------------- -------------------------------
gangban1 1000* 500 *0.8 400000.000000
gangban2 1000 * 500 *0.8 400000.000000
gangban3 1000*500*0.8 400000.000000
xxxxx 200*100*0.1 2000.000000
insert into test(name,gg)
select '钢板1','1000*500*0.8' union all
select '钢板2','1000 * 500 * 0.8' union all
select '钢板3','1000 * 500 * 0.8' union all
select '钢板4','1000 * 500*0.8'
godeclare @gg varchar(50),@num decimal(9,2)
declare @sql nvarchar(4000)
declare cur cursor for
select gg from test for update of zl
open cur
fetch next from cur into @gg
while @@fetch_status=0
begin
set @sql='select @num='+@gg
exec sp_executesql @sql,N'@num decimal(9,2) out',@num outupdate test set zl=@num where current of cur
fetch next from cur into @gg
end
deallocate curselect * from test
go
drop table test