这是我们系统的一个截图,其中规格描述是材料的长宽高,中间用*号隔开的,但我们的资料建立人员在初期并未将材料的长宽高三栏分别输入,即基本资料的长度,宽度和高度均是零,现在系统运行了发现这三个数据均需要在后续运算中用到,如果手工修正确实很费时费力,但系统内的材料有近万笔,能否请大家指点一下,有没什么函数和语句,可以一次性将这个规格分解成三段并写入长宽高三个栏位中,规格描述与长宽高均在同一个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 winform的chart曲线生成时有凸起
- ¥15 msix packaging tool打包问题
- ¥15 finalshell节点的搭建代码和那个端口代码教程
- ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
- ¥15 Centos / PETSc / PETGEM
- ¥15 centos7.9 IPv6端口telnet和端口监控问题
- ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
- ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
- ¥20 海浪数据 南海地区海况数据,波浪数据
- ¥20 软件测试决策法疑问求解答