我想分割一個字符串,但是它的數據類型爲varchar,因此拋出一個錯誤,指出它無法轉換爲浮點數。我嘗試過,但無法找到解決方案。我怎麼能做到這一點。將數據類型varchar轉換爲浮點數時出現錯誤字符串
(SELECT Value FROM dbo.SplitString('648-44-21001-13764 ', '-') WHERE Position = 3)
我想分割一個字符串,但是它的數據類型爲varchar,因此拋出一個錯誤,指出它無法轉換爲浮點數。我嘗試過,但無法找到解決方案。我怎麼能做到這一點。將數據類型varchar轉換爲浮點數時出現錯誤字符串
(SELECT Value FROM dbo.SplitString('648-44-21001-13764 ', '-') WHERE Position = 3)
檢查功能值列返回類型,似乎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)
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
在您的數據庫中添加此函數並嘗試查詢SELECT Value FROM SplitString('648-44-21001-13764',' - ')WHERE Position = 3 –
準確輸出你想要什麼? –
@HiteshThakor最後一個號碼 – user6574269
13764你想要這個數字作爲輸出嗎? –