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

SQL Server 2008 R2 - Skalær UDF resulterer i uendelig sløjfe

SELECT PATINDEX('%[^a-]%', N'aaa-def' COLLATE Latin1_General_BIN),
       PATINDEX('%[^-a]%', N'aaa-def' COLLATE Latin1_General_BIN), 
       PATINDEX('%[^a-]%', 'aaa-def' COLLATE Latin1_General_BIN),
       PATINDEX('%[^-a]%', 'aaa-def' COLLATE Latin1_General_BIN)
 

Returnerer

----------- ----------- ----------- ----------- 1 5 5 5

Så det ser ud til, at for varchar datatyper en efterfølgende - behandles som værende en del af et sæt, hvorimod for nvarchar det ignoreres (behandles som et forkert udformet område som a ignoreres også?)

BOL-posten for LIKE taler ikke eksplicit om, hvordan man bruger - inden for [] for at få det til at blive behandlet som en del af et sæt, men har eksemplet

LIKE '[-acdf]'
 

for at matche -, a, c, d, or f så jeg antager, at det skal være det første element i et sæt (dvs. at [^a-zA-Z0-9.~_-] skal ændres til [^-a-zA-Z0-9.~_] ). Det matcher også resultatet af min test ovenfor.



  1. Forespørgslen låser tabeller, kan ikke dræbe den proces

  2. Hvordan vælger man den sidste post i en tabel i SQL?

  3. Hvordan får man forskellen mellem på hinanden følgende rækker i MySQL?

  4. Kodningsfejl under skrivning af data fra excelfil til database (mysql)