本文介绍了将小数字符串转换为十进制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有几列的值以小数字符串(即6 11/32)或小数(1.5)为单位。是否有 CAST
或 CONVERT
调用可以将它们转换为小数?
I've got a few columns that have values either in fractional strings (i.e. 6 11/32) or as decimals (1.5). Is there a CAST
or CONVERT
call that can convert these to consistently be decimals?
错误:
消息8114,级别16,状态5,第1行
将数据类型varchar转换为数字时出错。
Msg 8114, Level 16, State 5, Line 1Error converting data type varchar to numeric.
我可以避免做任何形式的解析吗?
Can I avoid doing any kind of parsing?
谢谢!
PS我正在使用 SQL Server Management Studio 2012
。
推荐答案
CREATE FUNCTION ufn_ConvertToNumber(@STR VARCHAR(50))
RETURNS decimal(18,10)
AS
BEGIN
DECLARE @L VARCHAR(50) = ''
DECLARE @A DECIMAL(18,10) = 0
SET @STR = LTRIM(RTRIM(@STR)); -- Remove extra spaces
IF ISNUMERIC(@STR) > 0 SET @A = CONVERT(DECIMAL(18,10), @STR) -- Check to see if already real number
IF CHARINDEX(' ',@STR,0) > 0
BEGIN
SET @L = SUBSTRING(@STR,1,CHARINDEX(' ',@STR,0) - 1 )
SET @STR = SUBSTRING(@STR,CHARINDEX(' ',@STR,0) + 1 ,50 )
SET @A = CONVERT(DECIMAL(18,10), @L)
END
IF CHARINDEX('/',@STR,0) > 0
BEGIN
SET @L = SUBSTRING(@STR,1,CHARINDEX('/',@STR,0) - 1 )
SET @STR = SUBSTRING(@STR,CHARINDEX('/',@STR,0) + 1 ,50 )
SET @A = @A + ( CONVERT(DECIMAL(18,10), @L) / CONVERT(DECIMAL(18,10), @STR) )
END
RETURN @A
END
GO
然后通过选择dbo.ufn_ConvertToNumber('5 9/5')进行访问
Then access it via select dbo.ufn_ConvertToNumber ('5 9/5')
这篇关于将小数字符串转换为十进制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!