sql >> Database >  >> RDS >> Sqlserver

SQL Server 2008 Lege tekenreeks versus spatie

varchar s en gelijkheid zijn netelig in TSQL. De LEN functie zegt:

Retourneert het aantal tekens, in plaats van het aantal bytes, van de opgegeven tekenreeksexpressie, exclusief spaties aan het einde .

U moet DATALENGTH . gebruiken om een ​​echte byte . te krijgen telling van de gegevens in kwestie. Als je unicode-gegevens hebt, houd er dan rekening mee dat de waarde die je in deze situatie krijgt niet hetzelfde is als de lengte van de tekst.

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

Als het gaat om gelijkheid van uitdrukkingen, worden de twee strings als volgt voor gelijkheid vergeleken:

  • Kortere tekenreeks ophalen
  • Pad met spaties totdat de lengte gelijk is aan die van een langere string
  • Vergelijk de twee

Het is de middelste stap die onverwachte resultaten veroorzaakt - na die stap vergelijk je effectief witruimte met witruimte - vandaar dat ze als gelijk worden beschouwd.

LIKE gedraagt ​​zich beter dan = in de "leeg"-situatie omdat het geen blanco opvulling uitvoert op het patroon dat u probeerde te matchen:

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

Geeft eq terwijl:

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

Geeft ne

Voorzichtig met LIKE hoewel:het is niet symmetrisch:het behandelt de volgende witruimte als significant in het patroon (RHS) maar niet de match-expressie (LHS). Het volgende is hier overgenomen:

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


  1. Hoe kan ik kolommen in MySQL vertragen?

  2. Gedrag van NOT LIKE met NULL-waarden

  3. Barman automatiseren met Puppet:it2ndq/barman (deel twee)

  4. Zoeken in Microsoft SQL Server-database naar opgeslagen gegevens