SORU
9 EYLÜL 2009, ÇARŞAMBA


SQL Server 2008 Boş Dize vs Alanı

Biraz garip bu sabah karşılaştım ve yorum için gönderin dedim.

Birisi aşağıdaki SQL sorgu 'eşit' SQL 2008 karşı çalıştırın. baskılar neden açıklayabilir. Db uyumluluk düzey 100 olarak ayarlanır.

if '' = ' '
    print 'equal'
else
    print 'not equal'

Ve bu 0 değerini döndürür:

select (LEN(' '))

Alan kırpma otomatik olarak görünür. Eğer bu SQL Server'ın önceki sürümlerinde durumda ise hiçbir fikrim yok, ve ben artık buralarda bile onu test etmek.

Üretim bir sorgu yanlış sonuçlar dönüyordu çünkü bu karşılaştım. Bu davranış, herhangi bir yerde belgelenmiş bulabilirsiniz.

Herkes bu konuda herhangi bir bilgisi olan var mı?

CEVAP
9 EYLÜL 2009, ÇARŞAMBA


varchars ve eşitlik TSQL dikenli. LEN işlevi " der

Döner karakter sayısı, verilen string ifadenin bayt sayısını, yerinesondaki boşlukları hariç.

DATALENGTH söz konusu veriler byte doğru bir sayım almak için kullanmak gerekir. Eğer unicode veri varsa, bu durumda elde değeri metnin uzunluğu ile aynı olacaktır unutmayın.

print(DATALENGTH(' ')) --1
print(LEN(' '))        --0

İfadeler eşitlik söz konusu olduğunda, iki dize bu gibi eşitlik için karşılaştırıldığında

  • Daha Kısa bir dize
  • Kurusıkı Paduzunluğu kadar eşittir uzun dize
  • İki karşılaştırın

Beklenmeyen sonuçlar - bu adımdan sonra neden olan orta adım, etkili bir boşluk karşı boşluk karşılaştırma - dolayısıyla eşit olarak görülür.

LIKE. = daha iyi "kuru sıkı maç için çalışıyordun desen boş doldurma gerçekleştirmek değil, çünkü" durum:

if '' = ' '
print 'eq'
else
print 'ne'

eq verecek süre:

if '' LIKE ' '
print 'eq'
else
print 'ne'

ne ver

LIKE ile dikkatli olsa: simetrik değil: boşluk (OLUŞTURDUĞU) desen olarak önemli ama maç ifadesi (BELİRTİN). sondaki davranır Aşağıdaki here: alınır

declare @Space nvarchar(10)
declare @Space2 nvarchar(10)

set @Space = ''
set @Space2 = ' '

if @Space like @Space2
print '@Space Like @Space2'
else
print '@Space Not Like @Space2'

if @Space2 like @Space
print '@Space2 Like @Space'
else
print '@Space2 Not Like @Space'

@Space Not Like @Space2
@Space2 Like @Space

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • akalyne

    akalyne

    13 Mayıs 2009
  • CaliforniaMetin

    CaliforniaMe

    3 ŞUBAT 2013
  • Jon Reed

    Jon Reed

    14 AĞUSTOS 2006