34,590
社区成员
发帖
与我相关
我的任务
分享
--> 生成测试数据表: [tb]
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] ([PublicationScope] [nvarchar](20))
INSERT INTO [tb]
SELECT '1.2' UNION ALL
SELECT '600' UNION ALL
SELECT '7.5' UNION ALL
SELECT '1亿5000万' UNION ALL
SELECT '11万' UNION ALL
SELECT '000' UNION ALL
SELECT '2万/日访问量' UNION ALL
SELECT '2.5亿' UNION ALL
SELECT NULL UNION ALL
SELECT '(空值)' UNION ALL
SELECT '60000IP/天' UNION ALL
SELECT '252万/日访问量'
--SELECT * FROM [tb]
-->SQL查询如下:
IF OBJECT_ID('f_test')>0
DROP FUNCTION f_test
GO
CREATE FUNCTION f_test(
@s NVARCHAR(100)
)
RETURNS DECIMAL(18,2)
AS
BEGIN
IF ISNULL(@s,'')='' OR @s LIKE '%空值%'
RETURN 0
SET @s=@s+'Z'
DECLARE @r DECIMAL(18,2)
WHILE PATINDEX('%[^0-9.]%',@s)>0
BEGIN
SET @r = ISNULL(@r,0)
+ CAST(LEFT(@s,PATINDEX('%[^0-9.]%',@s)-1) AS FLOAT)
* CASE LEFT(STUFF(@s,1,PATINDEX('%[^0-9.]%',@s)-1,''),1)
WHEN '亿' THEN Power(CAST(10 AS BIGINT),8)
WHEN '万' THEN 10000
ELSE 1
END
SET @s=STUFF(@s,1,PATINDEX('%[^0-9.]%',@s),'')
END
RETURN @r
END
GO
SELECT [PublicationScope],dbo.f_test([PublicationScope]) result FROM tb
/*
PublicationScope result
-------------------- ---------------------------------------
1.2 1.20
600 600.00
7.5 7.50
1亿5000万 150000000.00
11万 110000.00
000 0.00
2万/日访问量 20000.00
2.5亿 250000000.00
NULL 0.00
(空值) 0.00
60000IP/天 60000.00
252万/日访问量 2520000.00
(12 行受影响)
*/
参考示例