sql >> Database >  >> RDS >> Sqlserver

SQL Server 2008 R2 - Scalaire UDF resulteert in oneindige lus

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)

Retourneren

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

Het lijkt er dus op dat voor varchar datatypes a trailing - wordt behandeld als onderdeel van een set, terwijl voor nvarchar het wordt genegeerd (behandeld als een verkeerd opgemaakt bereik als a wordt ook genegeerd?)

Het BOL-item voor LIKE spreekt niet expliciet over het gebruik van - binnen [] om het als onderdeel van een set te laten behandelen, maar heeft wel het voorbeeld

LIKE '[-acdf]'

overeenkomen met -, a, c, d, or f dus ik neem aan dat dit het eerste item in een set moet zijn (d.w.z. dat [^a-zA-Z0-9.~_-] moet worden gewijzigd in [^-a-zA-Z0-9.~_] ). Dat komt ook overeen met het resultaat van mijn testen hierboven.



  1. Importeer SQL-bestand in mysql

  2. Geen geschikt stuurprogramma gevonden voor 'jdbc:mysql://localhost:3306/mysql

  3. Hoe kan ik een getal naar beneden afronden op de dichtstbijzijnde 10?

  4. Hoe een bestand uitpakken in PL/SQL?