如果是字符串中存储的数字数据需要去掉小数中的尾部0, 则参考:SELECT col, col_convert = CASE WHEN CHARINDEX('.', col) = 0 THEN col WHEN RIGHT(col, PATINDEX('%[^0]%', REVERSE(col))) LIKE '.%' THEN LEFT(col, LEN(col) - PATINDEX('%[^0]%', REVERSE(col))) ELSE LEFT(col, LEN(col) - PATINDEX('%[^0]%', REVERSE(col)) + 1) END FROM( SELECT col = '100' UNION ALL SELECT col = NULL UNION ALL SELECT col = '.100' UNION ALL SELECT col = '.100100' UNION ALL SELECT col = '0.' UNION ALL SELECT col = '0' UNION ALL SELECT col = '100.1010' UNION ALL SELECT col = '100.0000' )A-- 结果: col col_convert -------- ----------- 100 100 NULL NULL .100 .1 .100100 .1001 0. 0 0 0 100.1010 100.101 100.0000 100(8 行受影响)
IF OBJECT_ID('GetRealNum') IS NOT NULL DROP FUNCTION GetRealNum GO CREATE FUNCTION GetRealNum(@NUM NUMERIC(19,6)) RETURNS VARCHAR(50) AS BEGIN DECLARE @STR VARCHAR(50) SELECT @STR=CONVERT(VARCHAR(50),@NUM) IF CHARINDEX('.',@STR)>0 SELECT @STR= LEFT(@STR,LEN(@STR)-PATINDEX('%[^0]%',REVERSE(@STR))+1)RETURN @STR END GO SELECT DBO.GetRealNum(12.2000) --12.2
col,
col_convert = CASE
WHEN CHARINDEX('.', col) = 0
THEN col
WHEN RIGHT(col, PATINDEX('%[^0]%', REVERSE(col))) LIKE '.%'
THEN LEFT(col, LEN(col) - PATINDEX('%[^0]%', REVERSE(col)))
ELSE LEFT(col, LEN(col) - PATINDEX('%[^0]%', REVERSE(col)) + 1)
END
FROM(
SELECT col = '100' UNION ALL
SELECT col = NULL UNION ALL
SELECT col = '.100' UNION ALL
SELECT col = '.100100' UNION ALL
SELECT col = '0.' UNION ALL
SELECT col = '0' UNION ALL
SELECT col = '100.1010' UNION ALL
SELECT col = '100.0000'
)A-- 结果:
col col_convert
-------- -----------
100 100
NULL NULL
.100 .1
.100100 .1001
0. 0
0 0
100.1010 100.101
100.0000 100(8 行受影响)
GO
CREATE FUNCTION GetRealNum(@NUM NUMERIC(19,6))
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE @STR VARCHAR(50)
SELECT @STR=CONVERT(VARCHAR(50),@NUM)
IF CHARINDEX('.',@STR)>0
SELECT @STR= LEFT(@STR,LEN(@STR)-PATINDEX('%[^0]%',REVERSE(@STR))+1)RETURN @STR
END
GO
SELECT DBO.GetRealNum(12.2000)
--12.2
就出来了12.后面有个点..你试试