使用LEN()函数时将Varchar转换为INT

时间:2014-03-14 20:25:54

标签: sql tsql

我正在尝试将varchar字段转换为int

 Cast(Len((VarcharFLD)-1)as Int)

基本上如果该字段的值是A555我的结果将是3,因为我只查找字段的长度。我收到一个错误,指出在转换varchar值时转换失败' A555'数据类型int。

任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:3)

这是你想要的表达方式:

Len(VarcharFLD)-1

len() 的结果是整数。您无需再次转换它。

但是,您的错误是由错误的括号引起的。你的表达是:

Cast(Len( (VarcharFLD)-1)as Int)
----------------------^

减号适用于VarcharFLD而不是len()的结果。由于该字段不包含数字值,因此会生成错误。

答案 1 :(得分:0)

试试这个:

(Len(VarcharFLD)-1)

答案 2 :(得分:0)

你错误地放了括号。

选择Cast((Len(VarcharFLD)-1)为Int)

答案 3 :(得分:0)

如果您只是寻找字段的长度,请使用:

select Len(isnull(VarcharFLD, ''))

我不明白你为什么使用-1。

答案 4 :(得分:0)

创建一个从给定字符串中提取数字的函数。

功能定义

CREATE FUNCTION dbo.udf_GetNumbers
(@strAlphaNumeric VARCHAR(4000))
RETURNS VARCHAR(4000)
AS
BEGIN
  DECLARE @intAlpha INT

  SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric)

BEGIN
  WHILE @intAlpha > 0
    BEGIN
      SET @strAlphaNumeric = STUFF(@strAlphaNumeric, @intAlpha, 1, '' )
      SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric )
    END
END

    RETURN ISNULL(@strAlphaNumeric,0)
END
GO

测试数据

DECLARE @TABLE TABLE(StringColumn VARCHAR(100))
INSERT INTO @TABLE VALUES
('ABC1'),('ABC12'),('ABC123'),('ABC1234')

<强>查询

在查询中使用以下函数。

SELECT LEN(dbo.udf_GetNumbers(StringColumn)) AS Lenght
FROM @TABLE

结果集

╔════════╗
║ Lenght ║
╠════════╣
║      1 ║
║      2 ║
║      3 ║
║      4 ║
╚════════╝

Working SQL FIDDLE