sql >> Databáze >  >> RDS >> Sqlserver

SQL Server 2008 R2 – Skalární UDF má za následek nekonečnou smyčku

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)

Vrátí

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

Zdá se tedy, že pro varchar datové typy koncové - je považováno za součást sady, zatímco pro nvarchar je ignorován (zacházeno jako s chybným rozsahem jako a je také ignorován?)

Záznam BOL pro LIKE nehovoří výslovně o tom, jak používat - v rámci [] aby to bylo považováno za součást sady, ale má příklad

LIKE '[-acdf]'

aby odpovídaly -, a, c, d, or f takže předpokládám, že to musí být první položka v sadě (tj. [^a-zA-Z0-9.~_-] je třeba změnit na [^-a-zA-Z0-9.~_] ). To také odpovídá výsledku mého testování výše.



  1. Jak zamknout řádek v mysql bez blokování?

  2. Použijte dotaz ve stylu SQL v Excelu pomocí VBA

  3. Vytvoření tabulky v SQL Server (T-SQL)

  4. Sloupec doktríny nenalezen:1054 Neznámý sloupec 's.features' v 'seznamu polí''