“Ve” ve “&” arasındaki fark


13

Mantıksal işlemler için öncelik sırasını anlamaya çalışıyorum ve aşağıdaki kodu var:

declare @T bit ='TRUE'
declare @F bit ='False'

print @T and @F

ve şu şekilde bir hata döndürür:

'Ve' anahtar kelimesinin yanında yanlış sözdizimi.

'Ve' ile '&' ifadesini değiştirdim ve kod tekrar çalışıyor. Eski kod neden çalışmadı? SQL sunucusu kullanıyorum.

Yanıtlar:


29
print @T & @F

İadeler 0

&olduğu Bitwise VE operatörü.

& Bitwise işleci, iki ifade arasında bir bitsel mantıksal AND gerçekleştirir ve her iki ifade için karşılık gelen her biti alır. Sonuçtaki bitler, yalnızca giriş ifadelerindeki her iki bitin (çözülmekte olan geçerli bit için) 1 değerine sahip olması durumunda 1 olarak ayarlanır; aksi takdirde, sonuçtaki bit 0 olarak ayarlanır.

Senin durumda @T & @Fetmek giderir 1 & 0veri türü bir sonucu ve getiri böylece BITdeğerle0

PRINTOperatöre iletildiğinde bu bitsonuç örtük olarak dizeye ve sonuç çıktısı istemciye verilir.


print @T and @F

Bunda çok yanlış var.

AND

İki Boole ifadesini birleştirir ve her iki ifade TRUE olduğunda TRUE döndürür

bitboole ile aynı değildir. Değiştirilemezler ve SQL Server bitgerektiğinde bir Boole veri tipine dolaylı olarak aktarılmaz (SQL Server, SQL Boolean veri tipini uygulamaz.).

Yani şöyle bir ifade kullanmanız gerekir

@T = 'TRUE' AND @F = 'TRUE'

onun yerine

@T and @F

O zaman bile sorunlarınız bitmedi - PRINTyine de boole ifadesini kabul etmiyor. İfadeyi CASEaşağıdaki gibi kullanabilirsiniz .

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

Cevabınız için teşekkürler! Bundan gerçekten çok şey öğrendim!
Jason
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.