Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server 2008 R2 - UDF vô hướng dẫn đến vòng lặp vô hạn

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)

Trả lại

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

Vì vậy, có vẻ như đối với varchar kiểu dữ liệu theo sau - được coi như là một phần của tập hợp trong khi đối với nvarchar nó bị bỏ qua (được coi là một dải ô không đúng định dạng là a cũng bị bỏ qua?)

Mục nhập BOL cho LIKE không nói rõ ràng về cách sử dụng - trong [] để làm cho nó được coi là một phần của tập hợp nhưng có ví dụ

LIKE '[-acdf]'

để khớp với -, a, c, d, or f vì vậy tôi giả sử rằng nó cần phải là mục đầu tiên trong một tập hợp (tức là [^a-zA-Z0-9.~_-] cần được thay đổi thành [^-a-zA-Z0-9.~_] ). Điều đó cũng khớp với kết quả thử nghiệm của tôi ở trên.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có thể xảy ra va chạm GUID không?

  2. Datetime2 là gì?

  3. Nhóm chỉ mục trên các cột không nhận dạng để tăng tốc độ chèn hàng loạt?

  4. Làm cách nào để chèn 1000 ngày ngẫu nhiên giữa một phạm vi nhất định?

  5. Hàm T-SQL có thể trả về kiểu bảng do người dùng xác định không?