2009-07-20 17 views
23

Gần đây, tôi gặp phải vấn đề khi sử dụng len() trong một truy vấn để tìm hiểu độ dài của truy vấn, len() không đếm dấu cách trong giá trị. Nhưng datalength() cũng đang đếm dấu cách.len() Vs datalength() trong sqlserver 2005

Điều này có nghĩa là nếu tôi đang thực hiện một số thao tác liên quan đến độ dài thực tế của giá trị thì tôi phải sử dụng dalalength() trên len().

ví dụ: Nếu tôi cần giá trị của một giá trị cụ thể có độ dài là 10 ký tự. tức là Nếu giá trị có độ dài 3 ký tự tôi sẽ thêm 7 khoảng trống vào nó.

Kính trọng

Trả lời

16

Có đó chính xác là những gì bạn phải làm. Nếu bạn muốn chỉ nhận được số ký tự không bao gồm khoảng trống, bạn sẽ sử dụng hàm LEN(), trong khi trong tất cả các trường hợp khác DATALENGTH().

Thậm chí LEN() tài liệu có thông tin rằng để có được số byte để đại diện cho phần mở rộng bạn nên sử dụng DATALENGTH()

Sau đây là các liên kết đến các tài liệu MSDN:

LEN()

DATALENGTH()

+2

và LEN() không thực sự ** CŨNG ** khoảng trắng đếm ....... –

+0

LEN (N'testing một hai ba, nothin g nhưng một bài kiểm tra ') trả về 41 ký tự bao gồm khoảng trắng (và DATALENGTH() trả về 82) –

+6

@marc_s ... nó không tính khoảng trống theo sau. LEN ('HELLO'), LEN ('HELLO') và LEN ('HELLO') trả về 5, 5 và 10 liên tiếp. Đây là tài liệu (""). –

30

Hãy cẩn thận. DATALENGTH trả lại số byte được sử dụng, không phải số ký tự.

+6

+1 LEN trên trường NVARCHAR trả về số ký tự trong chuỗi, trong khi DATALENGTH() trả về gấp đôi số đó (vì NVARCHAR lưu 2 byte cho mỗi ký tự) –

+1

@marc_s Bạn đang phát hiện , như mọi khi :) –

11

len đếm số ký tự sử dụng không phải là lưu trữ cần thiết, điều này sẽ còn rõ ràng hơn khi bạn sử dụng nvarchar thay vì varchar

len không tính dấu không gian hoặc

hãy nhìn vào

này
declare @v nchar(5) 
select @v ='ABC ' 


select len(@v),datalength(@v) 

và đầu ra cho len là 3 trong khi đầu ra cho datalength = 10

2

Chỉ cần sử dụng Replace():

SELECT LEN(REPLACE(N'4 Trailing Spaces: ', ' ', '_')) 

Điều này sẽ thay thế dấu cách bằng ký tự LEN() thực sự sẽ đếm.

Vấn đề với DataLength() là bạn phải theo dõi thời gian chuỗi của bạn là Unicode (nChar, nVarChar) hoặc ASCII (Char, VarChar) để biết liệu bạn có cần chia chiều dài dữ liệu của chuỗi Unicode 2 hay không.

0

Tôi sắp sử dụng Len (Thay thế '' blah blah ',' ',' _ ') gợi ý khi nó đánh tôi có thể hiệu quả hơn để sử dụng. Chỉ cần đăng trong trường hợp ai đó tình cờ gặp chủ đề này tôi đã làm

len ('blah blah' + '') -. 1

Các vấn đề liên quan