print @T & @F
Trả về 0
&
là toán tử Bitwise AND .
Toán tử & bitwise thực hiện logic logic bit giữa hai biểu thức, lấy từng bit tương ứng cho cả hai biểu thức. Các bit trong kết quả được đặt thành 1 khi và chỉ khi cả hai bit (đối với bit hiện tại được giải quyết) trong các biểu thức đầu vào có giá trị là 1; mặt khác, bit trong kết quả được đặt thành 0.
Trong trường hợp của bạn, @T & @F
giải quyết 1 & 0
và trả về kết quả của kiểu dữ liệu BIT
có giá trị0
Khi được truyền cho PRINT
toán tử, bit
kết quả này được truyền ngầm thành chuỗi và kết quả đầu ra cho máy khách.
print @T and @F
Có khá nhiều sai với nó.
AND
Kết hợp hai biểu thức Boolean và trả về TRUE khi cả hai biểu thức là TRUE
bit
không giống như boolean. Chúng không thể hoán đổi cho nhau và SQL Server sẽ không hoàn toàn bit
chuyển sang kiểu dữ liệu boolean khi cần (SQL Server không triển khai kiểu dữ liệu Boolean SQL.).
Vì vậy, bạn sẽ cần phải sử dụng một biểu thức như
@T = 'TRUE' AND @F = 'TRUE'
thay vì
@T and @F
Ngay cả sau đó các vấn đề của bạn vẫn chưa kết thúc - PRINT
dù sao cũng không chấp nhận biểu thức boolean. Bạn có thể sử dụng biểu thức CASE
như dưới đây.
PRINT CASE
WHEN (@T = 'TRUE' AND @F = 'TRUE') THEN 'True'
WHEN NOT (@T = 'TRUE' AND @F = 'TRUE') THEN 'False'
ELSE 'Unknown' -- SQL uses three valued logic
END