tmw*_*ods 0 sql sql-server casting
我有几列的值要么是小数字符串(即 6 11/32),要么是小数(1.5)。是否有一个CAST或CONVERT调用可以将这些转换为始终为小数?
错误:
消息 8114,级别 16,状态 5,第 1 行将数据类型 varchar 转换为数字时出错。
我可以避免进行任何类型的解析吗?
谢谢!
PS我在工作SQL Server Management Studio 2012。
小智 5
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
Run Code Online (Sandbox Code Playgroud)
然后通过 select dbo.ufn_ConvertToNumber ('5 9/5') 访问它
| 归档时间: |
|
| 查看次数: |
4115 次 |
| 最近记录: |