我创建了一个函数[fnRemoveNonNumericCharacters]
,它将电话号码作为输入删除除数字以外的任何字符,并仅返回数字部分。
示例:如果我将(800)-123-1234传递给该函数,则会删除非数字字符并返回8001231234。
我的输入将是电话号码,通常是浮动数据类型。所以我用了
select [dbo].[fnRemoveNonNumericCharacters](Ltrim(str(Phone, 50, 0)))
通过,它曾经工作正常。但现在我得到nvarchar
数字,如(800)-123-1234作为来源。
当我使用上述功能时,它出错:
'将数据类型nvarchar转换为float'
时出错
这是我正在使用的功能
Create Function [dbo].[fnRemoveNonNumericCharacters](@strText VARCHAR(1000))
RETURNS VARCHAR(1000)
AS
BEGIN
WHILE PATINDEX('%[^0-9]%', @strText) > 0
BEGIN
SET @strText = STUFF(@strText, PATINDEX('%[^0-9]%', @strText), 1, '')
END
IF (@strText Like '1%')
BEGIN
SET @StrText = Stuff(@StrText,1,1,'')
END
RETURN @strText
END
在传入上述功能时如何处理nvarchar
和float
个数字?
答案 0 :(得分:1)
sql server中的STR函数ex期望float数据类型作为第一个参数,在这种情况下,您的输入不是float数据类型,它是nvarchar类型。要解决这个问题,我建议使用带有Cast函数的substring函数。请在下面找到示例sql。
从test_phone中选择ltrim(子串(cast(phone_number as nvarchar(100)),0,50))
首先,您将phone_number数据类型从float更改为navrachar,然后使用子字符串收集前50个字符和Ltrim以进行修剪。
你可以试试这个,希望你的问题能得到解决。
注意:有不同的方法可以解决同样的问题,上述问题可能无法优化一个。
问候 - Sanjeeb