Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server 2008 Pusty ciąg a spacja

varchar s i równość są drażliwe w TSQL. LEN funkcja mówi:

Zwraca liczbę znaków, a nie liczbę bajtów, danego wyrażenia ciągu, z wyłączeniem końcowych spacji .

Musisz użyć DATALENGTH aby uzyskać prawdziwy byte liczbę danych, o których mowa. Jeśli masz dane Unicode, pamiętaj, że wartość, którą otrzymasz w tej sytuacji, nie będzie taka sama jak długość tekstu.

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

Jeśli chodzi o równość wyrażeń, dwa ciągi są porównywane pod kątem równości w następujący sposób:

  • Uzyskaj krótszy ciąg
  • Podkładka z zaślepkami aż długość będzie równa długości dłuższego sznurka
  • Porównaj te dwa

Jest to środkowy krok, który powoduje nieoczekiwane wyniki — po tym kroku skutecznie porównujesz białe znaki z białymi znakami — dlatego są one postrzegane jako równe.

LIKE zachowuje się lepiej niż = w sytuacji "puste", ponieważ nie wykonuje dopełniania pustym wzorcem, który próbujesz dopasować:

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

Da eq podczas:

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

Da ne

Ostrożnie z LIKE chociaż:nie jest symetryczny:traktuje końcowe białe znaki jako istotne we wzorcu (RHS), ale nie jako wyrażenie dopasowania (LHS). Z tego miejsca pochodzi:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak najlepiej wybrać minimalną wartość z kilku kolumn?

  2. SqlDataSourceEnumerator.Instance.GetDataSources() nie lokalizuje lokalnego wystąpienia serwera SQL 2008

  3. Operacje CRUD programu SQL Server

  4. STRING_SPLIT() w SQL Server 2016:kontynuacja nr 1

  5. Jak automatycznie wygenerować unikalny identyfikator w SQL, taki jak UID12345678?