Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Stringa vuota di SQL Server 2008 e spazio

varchar se l'uguaglianza sono spinosi in TSQL. Il LEN la funzione dice:

Restituisce il numero di caratteri, anziché il numero di byte, dell'espressione stringa data, esclusi gli spazi finali .

Devi usare DATALENGTH per ottenere un vero byte conteggio dei dati in questione. Se disponi di dati unicode, tieni presente che il valore che ottieni in questa situazione non sarà uguale alla lunghezza del testo.

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

Quando si tratta di uguaglianza di espressioni, le due stringhe vengono confrontate per l'uguaglianza in questo modo:

  • Ottieni una stringa più corta
  • Pad con spazi vuoti finché la lunghezza non è uguale a quella di una stringa più lunga
  • Confronta i due

È il passaggio intermedio che sta causando risultati imprevisti:dopo quel passaggio, stai effettivamente confrontando gli spazi bianchi con gli spazi bianchi, quindi sono considerati uguali.

LIKE si comporta meglio di = nella situazione "spazi vuoti" perché non esegue il riempimento vuoto sul motivo che stavi cercando di abbinare:

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

Darà eq mentre:

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

Darà ne

Fai attenzione con LIKE tuttavia:non è simmetrico:tratta gli spazi bianchi finali come significativi nel modello (RHS) ma non nell'espressione di corrispondenza (LHS). Da qui è tratto quanto segue:

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