ai đó xin vui lòng giải thích tại sao chọn len (0x0a000b) trả về 3? len đếm byte? và tại sao chọn trái (0x0a000b, 1) trả về không có gì? tôi mong đợi 0x0a (nếu len đếm byte) ...len của varbinary
tôi đang sử dụng MSSQL 2005
nhờ Konstantin
ai đó xin vui lòng giải thích tại sao chọn len (0x0a000b) trả về 3? len đếm byte? và tại sao chọn trái (0x0a000b, 1) trả về không có gì? tôi mong đợi 0x0a (nếu len đếm byte) ...len của varbinary
tôi đang sử dụng MSSQL 2005
nhờ Konstantin
select len(0x0a000b)
đang trả về độ dài của chuỗi được biểu thị bằng ba byte 0x0a, 0x00 và 0x0b.
select left(0x0a000b, 1)
trả về ký tự ngoài cùng bên trái của chuỗi, là ký tự dòng mới.
Lưu ý rằng select case when left(0x0a000b, 1) = 0x0a then 1 else 0 end
trả lại 1
, điều này cho biết thực tế bạn đang nhận được ký tự dòng mới.
Chỉnh sửa: Vui lòng xem các nhận xét bên dưới để biết thêm chi tiết.
trái được các nhà điều hành chuỗi và vì vậy nó không hoạt động trên dữ liệu nhị phân trong theo cách bạn mong đợi nó hoạt động, hãy sử dụng chuỗi con (@v, 1, 1) thay vào đó, hãy sử dụng chiều dài của dữ liệu nhị phân (ngoài các loại dữ liệu khác), thay vào đó hãy sử dụng chiều dài của dữ liệu nhị phân (ngoài các loại dữ liệu khác); mặc dù, có một ngoại lệ rất thú vị đối với các chuỗi, khi chúng ta đo chiều dài của một chuỗi bằng lệnh này, đầu tiên nó thực hiện rtrim trên nó; vì vậy len ('a') sẽ trả về 1
sẽ ai đó hãy giải thích tại sao chọn len (0x0a000b) trả về 3
nó được 3 nhân vật
0x có nghĩa là nó là nhị phân
nhân vật 0a 1
00 nhân vật 2
0b ký tự 3
bạn có ký tự không thể in được, tôi tin 0a là phương tiện vận chuyển rn, chạy này
select left(0x45000b, 1)
Vui lòng cập nhật đề cập đến rằng bên trái sẽ trả về varchar thay vì nhị phân và sử dụng chuỗi con thay thế. – ErikE