数据库表中有一数量字段,是varchar型。记录的数据都是一些数量(带单位) 如25ml 50g等,单位有很多。
现在我想按某一条件得到数量的总和 怎么计算(同一单位的)。
这是我上次提的问题,我想再问问 如果有小数点怎么办,比如2.5g 50.25ml 0.9g等
现在我想按某一条件得到数量的总和 怎么计算(同一单位的)。
这是我上次提的问题,我想再问问 如果有小数点怎么办,比如2.5g 50.25ml 0.9g等
IF OBJECT_ID('DBO.GET_NUMBER2') IS NOT NULL
DROP FUNCTION DBO.GET_NUMBER2
GO
CREATE FUNCTION DBO.GET_NUMBER2(@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^0-9]%',@S) > 0
BEGIN
set @s=stuff(@s,patindex('%[^0-9]%',@s),1,'')
END
RETURN @S
END
GO
--测试
PRINT DBO.GET_NUMBER('呵呵ABC123ABC')
GO
--123
--------------------------------------------------------------------
单位=right(@S,len(@S)-PATINDEX('%[^0-9]%',@S))
1KG = 1000G
1KM = 1000M
1斤 = 10两
1M = 100CM
...
insert into tb values('100平方米')
insert into tb values('120平方米')
insert into tb values('70-80平方米')
go--方法一
[吖-咗]
select left(area,PATINDEX('%[吖-做]%',area)-1) area from tb
/*
area
--------------------
100
120
70-80(所影响的行数为 3 行)
*/--方法二
--建立如下函数(非a-z A-Z 0-9 - , 以及中文字符之外的字符删除)
go
create function getnewstr(@oldstr varchar(100)) returns varchar(100)
as
begin
declare @i int
set @i = 1
while @i <= len(@oldstr)
if substring(@oldstr, @i, 1) like('[^a-z,A-Z,0-9,-]')
set @oldstr = replace(@oldstr, substring(@oldstr, @i, 1), '')
else
set @i = @i +1
return @oldstr
end
goselect area = dbo.getnewstr(area) from tb where area like('%[^a-z,A-Z,0-9,-]%')
/*
area
--------------------
100
120
70-80(所影响的行数为 3 行)
*/drop table tb
drop function dbo.getnewstr