这是我们系统的一个截图,其中规格描述是材料的长宽高,中间用*号隔开的,但我们的资料建立人员在初期并未将材料的长宽高三栏分别输入,即基本资料的长度,宽度和高度均是零,现在系统运行了发现这三个数据均需要在后续运算中用到,如果手工修正确实很费时费力,但系统内的材料有近万笔,能否请大家指点一下,有没什么函数和语句,可以一次性将这个规格分解成三段并写入长宽高三个栏位中,规格描述与长宽高均在同一个table中,感谢大家的指点,我是刚接触Sqlserver的老陈,不胜感激。
4条回答 默认 最新
- b2b160 2023-02-10 12:16关注
如果直接用sqlserver,可以写个存储过程运行,利用string_split函数分割字段字符串。
如果会写程序,可以写一个小工具,想怎么整理数据库都行。
如果是sql server2000,没有stringsplit函数的,可以用以下方式创建一个自定义函数,
IF OBJECT_ID('DBO.GetSplitItem') IS NOT NULL DROP FUNCTION DBO.GetSplitItem go create function [dbo].GetSplitItem( @strIn as varchar(20), @strSplit as varchar(20), @getindex as int) returns varchar(20) as begin declare @starIndex as int; declare @endIndex as int; declare @strLen as int; declare @strGet as varchar(20); declare @curitem as int; set @starIndex=1; set @strIn=replace(@strIn,'mm',''); set @curitem=0; set @endIndex=1; while @endIndex>0 begin set @endIndex=charindex(@strSplit,@strIn,@starIndex); if @curitem=@getindex begin if @endIndex>0 set @strLen = @endIndex-@starIndex else set @strLen = len(@strSplit)+1 set @strGet=substring(@strIn,@starIndex,@strLen); --select @strGet; break end set @curitem=@curitem+1; set @starIndex = @endIndex+1; end return @strGet end go
使用方法
select [dbo].GetSplitItem('10*20*30mm','*',0); select [dbo].GetSplitItem('10*20*30mm','*',1); select [dbo].GetSplitItem('10*20*30mm','*',2);
也可以用来更新字段
update 数据表 set 长度字段=[dbo].GetSplitItem(规格字段,'*',0),宽度字段=[dbo].GetSplitItem(规格字段,'*',1),高度字段=[dbo].GetSplitItem(规格字段,'*',2)
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 csmar数据进行spss描述性统计分析
- ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
- ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
- ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
- ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
- ¥15 运动想象脑电信号数据集.vhdr
- ¥15 三因素重复测量数据R语句编写,不存在交互作用
- ¥15 微信会员卡等级和折扣规则
- ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
- ¥15 随身WiFi网络灯亮但是没有网络,如何解决?