Len()vs datalength()in SQL服务器2005年
-
18-09-2019 - |
题
我最近面临的一个问题时使用 len()
在查询,以找出长度的查询, len()
是不计后空间中的价值。但 datalength()
是的结尾的空间。
这是否意味着如果我在做一些操作,其中涉及实际的长度值然后我需要用 dalalength()
在 len()
.
例如:如果我需要价值的一个特别值是10字符长。即如果价值是3个字符长我要追加7空间。
解决方案
是的,这正是你必须做什么。如果你想只得到你会用LEN()
功能排除字符空格的数量,而在其他情况下DATALENGTH()
。
即使LEN()
文档具有信息,要得到的字节数来表示应该使用DATALENGTH()
扩展
下面是链接到MSDN文档:
其他提示
要小心。 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位。
所有的一切,铭记每一种方法的局限性,并选择不管你相信会引起你少的问题。