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

Cách nhanh nhất để kiểm tra xem một ký tự có phải là một chữ số không?

Tôi sẽ rất ngạc nhiên nếu bạn có thể phát hiện ra bất kỳ sự khác biệt nào giữa WHERE col LIKE '[0-9]' và bất kỳ phương pháp nào khác mà bạn nghĩ ra. Nhưng tôi đồng ý với Denis, hãy loại bỏ điều đó trong một hàm để bạn sử dụng cùng một lần kiểm tra nhất quán trong tất cả mã của mình (hoặc ít nhất, nếu bạn đang tránh các UDF vì quá trình quét lớn, v.v., hãy đặt một điểm đánh dấu vào mã của bạn. giúp bạn dễ dàng thay đổi trên diện rộng sau này).

Điều đó nói rằng, bạn chắc chắn sẽ thấy nhiều hiệu suất đạt được chỉ bằng cách sử dụng UDF vô hướng hơn là phương pháp bạn sử dụng để phân tích cú pháp bên trong hàm. Bạn thực sự nên so sánh hiệu suất của UDF với việc thực hiện điều đó nội tuyến bằng cách sử dụng CASE . ví dụ:

SELECT Postal = CONVERT(INT, CASE WHEN SUBSTRING(postal,2,1) LIKE '[0-9]' 
       THEN SUBSTRING(postal, 2,1) END)
FROM ...

Điều này sẽ mang lại NULL nếu ký tự không phải là số.

Nếu bạn chỉ xử lý việc kiểm tra các biến cục bộ, thì việc bạn sử dụng phương pháp phân tích cú pháp nào sẽ không thành vấn đề và tốt hơn hết bạn nên tập trung nỗ lực tối ưu hóa của mình vào nơi khác.

CHỈNH SỬA thêm đề xuất vào JOIN đã được chứng minh mệnh đề. Điều này có thể dẫn đến việc quét ít liên tục hơn nhưng dễ đọc hơn rất nhiều (ít lệnh gọi chuỗi con hơn nhiều, v.v.):

;WITH v AS 
(
    SELECT /* other columns, */ patientPostal, 
      ss = SUBSTRING(v.patientPostal,2,1),
      FROM [whatever table is aliased v in current query]
)
SELECT /* column list */
FROM [whatever table is aliased z in current query]
INNER JOIN v ON z.postal = CONVERT(INT, CASE 
    WHEN v.ss = '0' THEN ss
    WHEN v.ss LIKE '[1-9]' THEN LEFT(v.patientPostal, 3)
END);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao kiểu DATETIME của SQL Server tiết kiệm thời gian trong tích tắc 1/300 giây?

  2. Các cách có thể để khắc phục sự cố lỗi siêu dữ liệu máy chủ SQL

  3. Truy vấn để khớp địa chỉ IP trong SQL Server

  4. Nhận ngôn ngữ hiện đang được sử dụng trong SQL Server

  5. CHARINDEX () so với PATINDEX () trong SQL Server - Sự khác biệt là gì?