TSQL LEN(子串)返回错误的数字

时间:2015-08-22 12:06:41

标签: tsql substring string-length

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

问题是我跑的时候
LEN( LTRIM(RTRIM(CONVERT(VARBINARY,SUBSTRING(A,101,4)))) )
在选择声明中' 20'显示为4 LEN。这件事是做什么的?

我不确定为什么VARBINARY存在,我认为它与大型机的值设置为整数时有关,而NULL则表示为'。'并清理它。无论我在删除CONVERT(VARBINARY。

)时仍然遇到此问题

1 个答案:

答案 0 :(得分:1)

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

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

修改

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

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