2016-09-06 83 views
0

我想分割一个字符串,但是它的数据类型为varchar,因此抛出一个错误,指出它无法转换为浮点数。我尝试过,但无法找到解决方案。我怎么能做到这一点。将数据类型varchar转换为浮点数时出现错误字符串

(SELECT Value FROM dbo.SplitString('648-44-21001-13764 ', '-') WHERE Position = 3) 
+0

准确输出你想要什么? –

+0

@HiteshThakor最后一个号码 – user6574269

+0

13764你想要这个数字作为输出吗? –

回答

0

检查功能值列返回类型,似乎VARCHAR所以,你必须明确将其转换为float:

ALTER FUNCTION [dbo].[SplitString] 
(
    @String NVARCHAR(4000), 
    @Delimiter NCHAR(1) 
) 
RETURNS TABLE 
AS 
RETURN 
(
    WITH Split(stpos,endpos) 
    AS(
     SELECT 0 AS stpos, CHARINDEX(@Delimiter,@String) AS endpos 
     UNION ALL 
     SELECT endpos+1, CHARINDEX(@Delimiter,@String,endpos+1) 
      FROM Split 
      WHERE endpos > 0 
    ) 
    SELECT 'Position' = ROW_NUMBER() OVER (ORDER BY (SELECT 1)), 
     'Value' = SUBSTRING(@String,stpos,COALESCE(NULLIF(endpos,0),LEN(@String)+1)-stpos) 
    FROM Split 
) 


SELECT CAST((SELECT Value FROM dbo.SplitString('648-44-21001-13764 ', '-') WHERE Position = 3) AS FLOAT) 
+0

是它的nvarchar类型,但仍然没有转换它。 – user6574269

+0

请显示你的插入语句和表格模式 –

+0

我有更新的答案,并把分裂功能脚本,请试试 –

0
Create FUNCTION SplitString 


@input NVARCHAR(MAX), @ Character CHAR(1) ) RETURNS @Output Table( )Value NVARCHAR(1000), 位置INT ) AS BEGIN DECLARE @StartIndex INT,@EndIndex INT,@位置诠释 SET @Position = 0 SET @StartIndex = 1 IF SUBSTRING(@input,LEN(@input) - 1,LEN (@input))<> @Character BEGIN SET @input = @input + @Character END

WHILE CHARINDEX(@Character, @Input) > 0 
    BEGIN 
     SET @EndIndex = CHARINDEX(@Character, @Input) 

     INSERT INTO @Output(Value,Position) 
     SELECT SUBSTRING(@Input, @StartIndex, @EndIndex - 1),@Position 

     SET @Input = SUBSTRING(@Input, @EndIndex + 1, LEN(@Input)) 
     set @[email protected]+1; 
    END 

    RETURN 
    END 
    GO 
+0

在您的数据库中添加此函数并尝试查询SELECT Value FROM SplitString('648-44-21001-13764',' - ')WHERE Position = 3 –

相关问题