SQL Server中字符串函數LEN 和 DATALENGTH比對

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

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

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

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

示例2:(不相同,DATALENGTHLEN的兩倍):  

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

示例3:(不相同,DATALENGTHLEN的兩倍多,由於LEN計算時不包含尾空格):  

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

示例4:(不相同,DATALENGTHLEN的兩倍,由於LEN計算時不包含尾空格,但包含頭部空格)  

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

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

  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億的整型變量,又將佔用多少個字節呢?試一下:

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

發佈了139 篇原創文章 · 獲贊 21 · 訪問量 82萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章