sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Server 2008 R2:UDF escalar da como resultado un bucle infinito

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)

Devoluciones

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

Entonces parece que para varchar tipos de datos un final - se trata como parte de un conjunto mientras que para nvarchar se ignora (se trata como un rango mal formado como a se ignora también?)

La entrada BOL para ME GUSTA no habla explícitamente sobre cómo usar - dentro de [] para que sea tratado como parte de un conjunto pero tiene el ejemplo

LIKE '[-acdf]'

para hacer coincidir -, a, c, d, or f así que supongo que debe ser el primer elemento de un conjunto (es decir, que [^a-zA-Z0-9.~_-] debe modificarse a [^-a-zA-Z0-9.~_] ). Eso también coincide con el resultado de mis pruebas anteriores.