2016-09-06 110 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 –

相關問題