Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server 2008 R2 - Скаларният UDF води до безкраен цикъл

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)

Връщане

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

Така че изглежда, че за varchar типове данни завършващ - се третира като част от набор, докато за nvarchar той се игнорира (третира се като неправилно образуван диапазон като a също се игнорира?)

Записът в BOL за ХАРЕСВАНЕ не говори изрично за това как да използвате - в рамките на [] за да го накарате да бъде третиран като част от набор, но има примера

LIKE '[-acdf]'

за съвпадение на -, a, c, d, or f така че предполагам, че трябва да е първият елемент в набор (т.е. че [^a-zA-Z0-9.~_-] трябва да се промени на [^-a-zA-Z0-9.~_] ). Това също съответства на резултата от моето тестване по-горе.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Избройте всички колони, посочени във всички процедури на всички бази данни

  2. 2 начина за създаване на база данни на свързан сървър с помощта на T-SQL

  3. Как да конвертирате низ от дата и час без разделители в SQL Server като дата и час?

  4. Заменете колоната за самоличност от int на bigint

  5. Rails &MSSQL 2008 – Ще ударим ли бариери?