将数据类型varchar转换为浮点数时出现错误字符串
问题描述:
我想分割一个字符串,但是它的数据类型为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
+0
在您的数据库中添加此函数并尝试查询SELECT Value FROM SplitString('648-44-21001-13764',' - ')WHERE Position = 3 –
准确输出你想要什么? –
@HiteshThakor最后一个号码 – user6574269
13764你想要这个数字作为输出吗? –