TSQL LEN(Substring) 返回错误的数字

TSQL LEN(Substring) returning wrong number

我将这段代码从一个固定宽度的文件中读取到一个 table 中,其中有一列 'A' 创建为 varchar(300) 然后读取 table as.. .
LTRIM(RTRIM(CONVERT(VARBINARY,SUBSTRING(A,101,4))))
在大多数情况下,它 returns 是一个 4 位数的年份。我遇到了一个错误,我收到的文件中有一个拼写错误,年份是“20”所以
LTRIM(RTRIM(CONVERT(VARBINARY,SUBSTRING(A,101,4))))
returns a 20 我想在 where 语句中放入一个过滤器
LEN( LTRIM(RTRIM(CONVERT(VARBINARY,SUBSTRING(A,101,4)))) ) = 4

问题是当我 运行
LEN( LTRIM(RTRIM(CONVERT(VARBINARY,SUBSTRING(A,101,4)))) )
在 select 语句中,'20' 显示为具有 4 LEN。这东西在干什么?

我不确定为什么 VARBINARY 在那里,我认为它与大型机的值设置为整数和 NULL 时有关,它显示为“。”这样就清理干净了。不管怎样,当我删除 CONVERT(VARBINARY.

LEN Returns 给定字符串表达式的字符数,而不是字节数,不包括尾随空格。

DATALENGTH Returns 用于表示任何表达式的字节数。 DATALENGTH 对于 varchar、varbinary、text、image、nvarchar 和 ntext 数据类型特别有用,因为这些数据类型可以存储可变长度数据。 NULL 的 DATALENGTH 为 NULL。

编辑

我想我明白了。很多时候你提到“.”。在我看来,你有隐式转换为 varchar 的浮点值。检查下面。

SELECT LEN(t.val), t.val
FROM  (SELECT 20.0) AS t(val)