我最近面临的一个问题时使用 len() 在查询,以找出长度的查询, len() 是不计后空间中的价值。但 datalength() 是的结尾的空间。

这是否意味着如果我在做一些操作,其中涉及实际的长度值然后我需要用 dalalength()len().

例如:如果我需要价值的一个特别值是10字符长。即如果价值是3个字符长我要追加7空间。

有帮助吗?

解决方案

是的,这正是你必须做什么。如果你想只得到你会用LEN()功能排除字符空格的数量,而在其他情况下DATALENGTH()

即使LEN()文档具有信息,要得到的字节数来表示应该使用DATALENGTH()扩展

下面是链接到MSDN文档:

LEN()

DATALENGTH()

其他提示

要小心。 DATALENGTH 返回使用的字节数,字符的数量不限。

len个计数用于未存储的字符所要求的数量,在使用为nvarchar代替VARCHAR这将更加明显

len个不计数尾部空格或者

看看这

declare @v nchar(5)
select @v ='ABC  '


select len(@v),datalength(@v)

和输出为len为3,而输出为数据长度= 10

只要使用替换():

SELECT LEN(REPLACE(N'4 Trailing Spaces:    ', ' ', '_'))

此将替换与该LEN()将实际计数的字符尾随空格。搜索结果 与数据长度()问题是你必须保持的阉羊您的字符串是Unicode(NCHAR,NVARCHAR)或ASCII(CHAR,VARCHAR)要知道,如果你还需要除以2 Unicode字符串的数据长度的轨道。

我正使用Len(替换('等等','','_') 建议当它袭击了我它可能是更高效的使用。刚刚发布在的情况下有人绊倒在这个线程,因为我没有。

len('等等'+'.')-1

不幸的是,我知道没有完美的解决方案。

一个提出的解决方案的,LEN(string + '.')-1返回尺寸8000。这是因为级联被忽略的错误结果(-1)如果字符串是大小4000或非Unicode的Unicode和。如果你想,通过铸造字符串到MAX尺寸字符串可以解决此问题:?LEN(CAST(string as nvarchar(max)) + '.')-1,但它是值得的。

如由其他人提及的,DATALENGTH(string)返回用于存储的字节数。对于Unicode字符串,它可能没有足够的除以2的结果: Unicode代理字符可能需要超过16位。

所有的一切,铭记每一种方法的局限性,并选择不管你相信会引起你少的问题。

scroll top