Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server 2008 R2 — skalarny UDF skutkuje nieskończoną pętlą

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)

Zwroty

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

Wygląda więc na to, że dla varchar typy danych a kończący - jest traktowany jako część zestawu, podczas gdy dla nvarchar jest ignorowany (traktowany jako zniekształcony zakres jako a też jest ignorowany?)

Wpis BOL dla LIKE nie mówi wprost o tym, jak używać - w [] aby był traktowany jako część zestawu, ale ma przykład

LIKE '[-acdf]'

aby dopasować -, a, c, d, or f więc zakładam, że musi to być pierwsza pozycja w zestawie (tzn. że [^a-zA-Z0-9.~_-] należy zmienić na [^-a-zA-Z0-9.~_] ). To również zgadza się z wynikami moich powyższych testów.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przekonwertować uniksowy znacznik czasu na wartość daty/godziny w SQL Server

  2. Automatyzacja przetwarzania modelu tabelarycznego baz danych usług Analysis Services (SSAS) w programie SQL Server

  3. Jaki jest najlepszy sposób tworzenia i wypełniania tabeli liczb?

  4. Jak zaimportować plik danych sql do programu SQL Server?

  5. Rozciągnij bazę danych w SQL Server 2016 RTM