Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

LEN() vs DATALENGTH() di SQL Server

Saat menggunakan T-SQL di SQL Server (atau Azure) LEN() dan DATALENGTH() fungsi akan sering mengembalikan hasil yang sama, tetapi tidak selalu. Ada beberapa kasus di mana fungsi-fungsi ini akan mengembalikan hasil yang sama sekali berbeda untuk apa yang tampak sebagai data yang sama. Ini karena ada perbedaan penting antara cara LEN() dan DATALENGTH() fungsi berfungsi, seperti yang akan kita lihat di sini.

Pertama, inilah definisi singkat dari masing-masing:

LEN()
Mengembalikan jumlah karakter dari ekspresi string yang ditentukan, tidak termasuk trailing blank.
DATALENGTH()
Mengembalikan jumlah byte yang digunakan untuk mewakili ekspresi apa pun.

Catatan "karakter" vs "byte". Perhatikan juga bahwa “tidak termasuk trailing blank” hanya berlaku untuk satu.

Berikut adalah beberapa contoh untuk menunjukkan perbedaan antara LEN() dan DATALENGTH() .

Trailing Blank

Satu perbedaan antara LEN() dan DATALENGTH() fungsinya adalah LEN() fungsi tidak termasuk trailing blank (spasi di belakang, tab, dll) sedangkan DATALENGTH() termasuk tertinggal kosong. Perhatikan, kita hanya berbicara tentang kekosongan yang muncul di akhir string – bukan di awal atau di tengah.

Berikut ini contoh tanpa trailing blank:

SELECT 
    LEN('Lit') AS Len,
    DATALENGTH('Lit') AS DataLength;

Hasil:

Len  DataLength
---  ----------
3    3   

Dan inilah contoh dengan trailing blank:

SELECT 
    LEN('Lit ') AS Len,
    DATALENGTH('Lit ') AS DataLength;

Hasil:

Len  DataLength
---  ----------
3    4  

Namun, spasi awal dihitung oleh kedua fungsi:

SELECT 
    LEN(' Lit') AS Len,
    DATALENGTH(' Lit') AS DataLength;

Hasil:

Len  DataLength
---  ----------
4    4         

Byte vs Karakter

Perbedaan utama lainnya antara LEN() dan DATALENGTH() apakah itu LEN() fungsi mengembalikan jumlah karakter dalam sebuah string. Di sisi lain, DATALENGTH() mengembalikan jumlah byte dalam sebuah ekspresi.

Ini adalah perbedaan penting karena jumlah byte dalam ekspresi tidak selalu cocok dengan jumlah karakter dalam string. Saat memproses string unicode, DATALENGTH() akan mengembalikan dua kali jumlah karakter. Ini karena string unicode menyimpan 2 byte per karakter.

Pada contoh di atas, kita melihat bahwa keduanya LEN() dan DATALENGTH() mengembalikan hasil yang sama untuk kata Lit ( 3 ). Namun, begitu kita mulai mengkueri database, hasilnya akan bergantung pada cara data disimpan. Misalnya, jika disimpan sebagai varchar , hasilnya akan sama. Jika disimpan sebagai nvarchar  DATALENGTH() fungsi akan mengembalikan dua kali jumlah karakter. Dan jika disimpan sebagai katakanlah, char(25)DATALENGTH() akan mengembalikan tepat 25 karakter.

Contoh

Mari kita jalankan kueri berikut:

SELECT 
    ArtistName, 
    LEN(ArtistName) AS Len,
    DATALENGTH(ArtistName) AS DataLength
FROM Artists 
WHERE ArtistName = 'Lit';

Hasil kueri ini akan bergantung pada cara data disimpan.

nvarchar(255)

Jika ArtistName kolom menyimpan data sebagai nvarchar(255) :

ArtistName  Len  DataLength
----------  ---  ----------
Lit         3    6         

varchar(255)

Jika kita mengubah kolom itu menjadi varchar(255) , kita mendapatkan hasil sebagai berikut:

ArtistName  Len  DataLength
----------  ---  ----------
Lit         3    3         

char(25)

Jika kita mengubah kolom itu menjadi char(25) , kita mendapatkan hasil sebagai berikut:

ArtistName                 Len  DataLength
-------------------------  ---  ----------
Lit                        3    25        

Jadi mungkin moral untuk semua ini adalah, jika Anda mendapati diri Anda mendapatkan hasil yang aneh saat mencoba mengambil panjang string, dll, periksa apakah Anda menggunakan fungsi yang benar.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara membuat daftar yang dipisahkan koma menggunakan kueri SQL?

  2. Pernyataan ALTER TABLE bertentangan dengan batasan FOREIGN KEY

  3. Mendapatkan minimal dua nilai dalam SQL

  4. Lakukan regex (ganti) dalam kueri SQL

  5. TIMEFROMPARTS() Contoh di SQL Server (T-SQL)