有一个表A,规格里可能有小数点,提取后再四舍五入:
A01[厚度float] A02[宽度float] A03[长度float] A04[规格]
null null null 8*150.05*990.65
....
将A04里的三个数字分割出来分别放到A01,A02,A03字段(都是float)里,结果如下:
A01[厚度] A02[宽度] A03[长度] A04[规格]
8 150 991 8*150*991
....
求一个高效的方法,谢谢
------解决思路----------------------
UPDATE A
SET A01 = ROUND(REPLACE(PARSENAME(REPLACE(REPLACE(A04,'.','_'),'*','.'),3),'_','.'),0),
A02 = ROUND(REPLACE(PARSENAME(REPLACE(REPLACE(A04,'.','_'),'*','.'),2),'_','.'),0),
A03 = ROUND(REPLACE(PARSENAME(REPLACE(REPLACE(A04,'.','_'),'*','.'),1),'_','.'),0)
UPDATE A
SET A04 = Convert(varchar(10),A01)+'*'+
Convert(varchar(10),A02)+'*'+
Convert(varchar(10),A03)
SELECT * FROM A
A01 A02 A03 A04
---------------------- ---------------------- ---------------------- --------------------------------
8 150 991 8*150*991
------解决思路----------------------
没什么效率的。
非规整数据应该再插入前就进行预处理,这样会生成大量日志。
------解决思路----------------------
SELECT ROUND(a.col.query('/root/v[1]').value('.','float'),0) A01
,ROUND(a.col.query('/root/v[2]').value('.','float'),0) A02
,ROUND(a.col.query('/root/v[3]').value('.','float'),0) A03
,a.A04
FROM (SELECT A04,CONVERT(XML,'<root><v>'+REPLACE(A04,'*','</v><v>')+'</v></root>') col FROM t ) a
------解决思路----------------------
每个A04都有转成XML也很费时。
总之不规则的数据不会有高效的方法。