SQL Server中字符串函數LEN 和 DATALENGTH辨析

LEN:返回指定字符串表達式的字符(而不是字節)數,其中不包含尾隨空格。函數

DATALENGTH:返回用於表示任何表達式的字節數。測試

示例1:(相同,返回結果都爲5): .net

  1. select LEN ('sssss')  
  2. select DATALENGTH('sssss')  

示例2:(不相同,DATALENGTH是LEN的兩倍):  code

  1. select LEN(N'sssss')  
  2. select DATALENGTH(N'sssss')  

示例3:(不相同,DATALENGTH是LEN的兩倍多,因爲LEN計算時不包含尾空格):  blog

  1. select LEN(N'sssss  ')  
  2. select DATALENGTH(N'sssss  ')  

示例4:(不相同,DATALENGTH是LEN的兩倍,因爲LEN計算時不包含尾空格,但包含頭部空格)  字符串

  1. select LEN(N' sssss')  
  2. select DATALENGTH(N' sssss')  

注意:當變量爲null時,LEN,DATALENGTH都爲null get

  1. DECLARE @MyVar VARCHAR(10)  
  2. SET @MyVar = NULL  
  3. select LEN(@MyVar)  
  4. select DATALENGTH(@MyVar)  

 

DATALENGTH()函數返回一個用於對值進行管理的字節數,這有助於揭示不一樣數據類型間的一些有趣差異。當把varchar類型傳遞給DATALENGTH()和LEN()函數時,它們將返回相同的值:博客

DECLARE @Value varchar(20)  SET @Value = 'abc' SELECT DATALENGTH(@Value)  SELECT LEN(@Value) 這些語句的返回值都爲3。由於varchar類型使用了3個單字節字符來存儲三個字符的值。然而,若是使用nVarchar類型來管理相同長度的值,就要佔用多一倍的字節:變量

DECLARE @Value nvarchar(20)  SET @Value = 'abc' SELECT DATALENGTH(@Value)  SELECT LEN(@Value) DATALENGTH()函數返回值爲6,由於每一個使用Unicode字符集的字符都要佔用2個字節。LEN()函數返回值爲3,由於這個函數返回字符數,不是字節數。如下是一個有趣的測試:要存儲一個值爲2的整型變量,要佔用多少個字節?而若是要存儲一個值爲20億的整型變量,又將佔用多少個字節呢?試一下:select

DECLARE @Value1 int, @Value2 int SET @Value1 = 2  SET @Value2 = 2000000000  SELECT DATALENGTH(@Value1)  SELECT LEN(@Value1)  SELECT DATALENGTH(@Value2)  SELECT LEN(@Value2) 在這兩種狀況下,DATALENGTH()函數都返回4。由於int類型不論值是多少,老是使用4個字節。LEN()函數本質上將整型值當成已轉換成字符型的數據來處理,因此,在這個例子中,它分別返回1和10,即值的位數。

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/Hello_World_wusu/archive/2009/10/14/4667452.aspx

相關文章
相關標籤/搜索