一、SQL Server中Len()
返回指定字符串表达式的字符(而不是字节)数,其中不包含尾随空格。
二、SQL Server中DataLength()
返回用于表示任何表达式的字节数
三、通过实例说明SQL Server中Len和DataLength的区别
实例1、相同,返回结果都为5
select LEN ('sssss') ---5
select DATALENGTH('sssss') ---5
实例2、不相同,DATALENGTH是LEN的两倍,因为每个使用Unicode字符集的字符都要占用2个字节
select LEN(N'sssss') ---5
select DATALENGTH(N'sssss') ---10
实例3、不相同,DATALENGTH是LEN的两倍多,由于LEN计算时不包含尾空格
select LEN(N'sssss ') ---5
select DATALENGTH(N'sssss ') ---14
实例4、不相同,DATALENGTH是LEN的两倍,由于LEN计算时不包含尾空格,但包含头部空格
select LEN(N' sssss') ---6
select DATALENGTH(N' sssss') ---12
SQL Server中的DataLength和Len函数
DataLength返回字符串的字节长度.
Len返回字符串的字符长度.
这种区别主要存在于中英文混输的情况.用以下例子来说明情况.
example :
select len(convert(varchar(50),N'狮lion')) --5 N''表示Unicode格式字符串
select datalength(convert(varchar(50),N'狮lion')) --6
select len(N'狮lion') --5
select datalength(N'狮lion') --10
接下来我们分析一下为何会这样.
Len返回字符串的字符长度,这个好理解,一个汉字'狮'+4个字母'lion'=5个字符.每个汉字和字母都占一个字符长度.
DataLength返回字符串的字节长度.对于字节长度,需要理解:一般编码模式下,汉字和英文字母所占字节是不一样的.一般来说,汉字占2个字节,英文字符占一个字节.而对于Unicode编码,汉字和英文字母都占2个字节.
讲解一下varchar和nvarchar的区别,varchar是普通编码的字符串,nvarchar是Unicode编码的字符串,对应例子,就是对汉字’狮’来说,varchar格式的字符串长度为1,nvarchar格式的字符串长度为2.
因此对以上例子来说:
len(convert(varchar(50),N'狮lion')) --返回字符长度,'狮lion',一共5个字符,varchar格式字符
len(N'狮lion') --返回字符长度,'狮lion',一共5个字符,nvarchar格式字符
datalength(convert(varchar(50),N'狮lion')) --返回字节长度,varchar格式字符'狮lion','狮'占2个字节,
--'lion'中每个字母占用一个字节,共占用4个字节
datalength(N'狮lion') --返回字节长度,Unicode格式字符,汉字'狮'占2个字节,
--'lion'中每个字母占用2个字节,共占用8个字节
本文详细解析了SQLServer中Len()与DataLength()函数的区别。Len()返回字符串的字符数,不计尾随空格;DataLength()返回字符串的字节数。通过实例展示了在不同编码模式下,如Unicode,这两个函数如何反映字符和字节的不同计算方式。
1万+

被折叠的 条评论
为什么被折叠?



