我正在尝试将varchar字段转换为int
Cast(Len((VarcharFLD)-1)as Int)
基本上如果该字段的值是A555我的结果将是3,因为我只查找字段的长度。我收到一个错误,指出在转换varchar值时转换失败' A555'数据类型int。
任何帮助将不胜感激。
答案 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