sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server 2008 R2 - Skalär UDF resulterar i oändlig loop

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)

Retur

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

Så det verkar som för varchar datatypar en efterföljande - behandlas som en del av en uppsättning medan för nvarchar det ignoreras (behandlas som ett felaktigt intervall som a ignoreras också?)

BOL-posten för GILLA talar inte uttryckligen om hur man använder - inom [] för att få det att behandlas som en del av en uppsättning men har exemplet

LIKE '[-acdf]'

för att matcha -, a, c, d, or f så jag antar att det måste vara det första objektet i en uppsättning (dvs. att [^a-zA-Z0-9.~_-] måste ändras till [^-a-zA-Z0-9.~_] ). Det matchar också resultatet av mina tester ovan.



  1. Vilken är standardvalsordningen i PostgreSQL eller MySQL?

  2. Försöker skapa en värdelista inklusive ett tabellvärde och siffror under det

  3. generera enum-klass från tabell med JOOQ

  4. Konvertera en IP till en Long i MySQL