注册 登录
编程论坛 SQL Server论坛

请教关于substring与charindex的用法

sky_yang_sky 发布于 2010-01-20 11:44, 1456 次点击
  fnumber     fname                 fmodel
BK70200081    分隔板-等高可调式    700W$200L$0.8t
BK80100081    分隔板-等高可调式    800W$100L$0.8t
BK80200081    分隔板-等高可调式    800W$200L$0.8t
BL10400235    楼板-平板    200W$40H$400L$2.3t
BL10500205    楼板-平板    200W$40H$500L$2.0t
BL10600202    楼板-平板    200W$40H$600L$2.0t
BL10600205    楼板-平板    200W$40H$600L$2.0t
BL10600232    楼板-平板    200W$40H$600L$2.3t
BL10600235    楼板-平板    200W$40H$600L$2.3t
BL10700205    楼板-平板    200W$40H$700L$2.0t
BL10800202    楼板-平板    200W$40H$800L$2.0t
BL10800205    楼板-平板    200W$40H$800L$2.0t
BL10800232    楼板-平板    200W$40H$800L$2.3t
BL10800235    楼板-平板    200W$40H$800L$2.3t
上表我要实现的功能是各数字相乘所得的结果:
fnumber        fname                fmodel                        fweight
BK70200081    分隔板-等高可调式    700W$200L$0.8t              112000
BL10800235    楼板-平板            200W$40H$800L$2.3t          14720000
我用substring与charindex函数来实现分离,要是不用,都报substring函数参数有问题,
select substring(fmodel,1,charindex('*',fmodel)-2) from sheet1$
请问应怎么实现   
4 回复
#2
sky_yang_sky2010-01-20 13:58
请哪位会的大侠帮忙,只要能实现这种功能,在SQL中用什么方法都行
#3
happynight2010-01-20 13:59
你的目的就是将fmodel字段分拆成 W、L、WEIGHT后相乘即可
----调试代码如下
SELECT '700W$200L$0.8t',charindex('W','700W$200L$0.8t'),
SUBSTRING('700W$200L$0.8t',0,charindex('W','700W$200L$0.8t')) AS W,
SUBSTRING('700W$200L$0.8t',charindex('$','700W$200L$0.8t')+1,charindex('L','700W$200L$0.8t')-charindex('$','700W$200L$0.8t')-1) AS L,
SUBSTRING('700W$200L$0.8t',charindex('L','700W$200L$0.8t')+2,LEN('700W$200L$0.8t')-charindex('L','700W$200L$0.8t')-2) AS WEIGHT,
CAST(SUBSTRING('700W$200L$0.8t',0,charindex('W','700W$200L$0.8t')) AS NUMERIC(10,2)) *
CAST(SUBSTRING('700W$200L$0.8t',charindex('$','700W$200L$0.8t')+1,charindex('L','700W$200L$0.8t')-charindex('$','700W$200L$0.8t')-1) AS NUMERIC(10,2)) *
CAST(SUBSTRING('700W$200L$0.8t',charindex('L','700W$200L$0.8t')+2,LEN('700W$200L$0.8t')-charindex('L','700W$200L$0.8t')-2) AS NUMERIC(10,2)) AS FWEIGHT
--你将上面代码中的'700W$200L$0.8t'用字段名 fmodel代替
SELECT fmodel,charindex('W',fmodel),
SUBSTRING(fmodel,0,charindex('W',fmodel)) AS W,
SUBSTRING(fmodel,charindex('$',fmodel)+1,charindex('L',fmodel)-charindex('$',fmodel)-1) AS L,
SUBSTRING(fmodel,charindex('L',fmodel)+2,LEN(fmodel)-charindex('L',fmodel)-2) AS WEIGHT,
CAST(SUBSTRING(fmodel,0,charindex('W',fmodel)) AS NUMERIC(10,2)) *
CAST(SUBSTRING(fmodel,charindex('$',fmodel)+1,charindex('L',fmodel)-charindex('$',fmodel)-1) AS NUMERIC(10,2)) *
CAST(SUBSTRING(fmodel,charindex('L',fmodel)+2,LEN(fmodel)-charindex('L',fmodel)-2) AS NUMERIC(10,2)) AS FWEIGHT
FROM 表
#4
sky_yang_sky2010-01-20 14:12
这样仍是和我的那个一样,出现"传递到 SUBSTRING 函数的长度参数无效。"的错误
#5
happynight2010-01-20 15:12
那就要检查你的数据了 你的数据中肯定存在 没有W或L或WEIGHT的数据
1