你可以使用正则表达式以及一些字符串函数来提取SQL Server中包含计量单位的数字。

/*



例如,假设你有一个包含数字和计量单位的字符串列`string_col`,比如"20米"、"10cm"、"5.5km"等等,你可以使用以下查询语句来提取数字和计量单位:




这个查询语句的原理是,首先用`PATINDEX()`函数找到包含数字的子字符串的起始位置。然后使用`SUBSTRING()`函数提取该子字符串,接着再用`PATINDEX()`函数找到该子字符串后的第一个非数字字符,从而确定数字的结束位置。最后再用`CAST()`函数将数字字符串转换为浮点数,并使用`SUBSTRING()`函数提取计量单位字符串。


注意,这个查询语句假设计量单位一定跟在数字后面,如果有其他字符出现在数字和计量单位之间,会导致查询结果不准确。另外,如果同一个查询中包含多种不同的计量单位,也需要对这些不同的计量单位进行处理。

*/


DECLARE @t TABLE (id INT IDENTITY(1, 1),
                  cname NVARCHAR(30));
INSERT INTO @t (cname)
SELECT '1瓶'
UNION ALL
SELECT '15粒'
UNION ALL
SELECT '356片'
UNION ALL
SELECT '18支'
UNION ALL
SELECT '8粒'
UNION ALL
SELECT '3.5公斤'
UNION ALL
SELECT '4.894平方米';
SELECT *
  FROM @t;
DECLARE @t TABLE (id INT IDENTITY(1, 1),
                  cname NVARCHAR(30));
INSERT INTO @t (cname)
SELECT '1瓶'
UNION ALL
SELECT '15粒'
UNION ALL
SELECT '356片'
UNION ALL
SELECT '18支'
UNION ALL
SELECT '8粒'
UNION ALL 
SELECT '3.5公斤'
UNION ALL 
SELECT '4.894平方米'
SELECT *
  FROM @t;
--适用于数字在中间,计量单位在最右边的情况
SELECT CAST(SUBSTRING(cname, PATINDEX('%[0-9.]%', cname), PATINDEX('%[^0-9.]%', cname) - PATINDEX('%[0-9.]%', cname)) AS MONEY) AS 数量
,right(cname,LEN(cname)-PATINDEX('%[^0-9.]%', cname)+1) AS 单位
  FROM @t;