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

Najszybszy sposób sprawdzenia, czy znak jest cyfrą?

Byłbym bardzo zaskoczony, gdybyś kiedykolwiek był w stanie wykryć jakąkolwiek różnicę między WHERE col LIKE '[0-9]' i wszelkie inne metody, które wymyślisz. Ale zgadzam się z Denisem, odłóż to w funkcji, aby konsekwentnie używać tego samego sprawdzenia w całym kodzie (lub przynajmniej, jeśli unikasz UDF z powodu dużych skanów itp., umieść w kodzie znacznik, który będzie ułatwiają późniejsze zmiany na szeroką skalę).

To powiedziawszy, z pewnością zobaczysz większy spadek wydajności tylko przy użyciu skalarnego UDF niż metody używanej do analizowania wewnątrz funkcji. Naprawdę powinieneś porównać wydajność UDF z robieniem tego inline za pomocą CASE . np.

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

To da NULL jeśli znak nie jest cyfrą.

Jeśli masz do czynienia tylko ze sprawdzaniem zmiennych lokalnych, to naprawdę nie ma znaczenia, jakiej metody parsowania używasz, i lepiej skoncentruj swoje wysiłki optymalizacyjne gdzie indziej.

EDYTUJ dodanie sugestii do zademonstrowanego JOIN klauzula. Potencjalnie prowadzi to do mniej stałych skanowań, ale jest o wiele bardziej czytelne (znacznie mniej wywołań podciągów itp.):

;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. Nie widzę wyzwalaczy, które utworzyłem w SQL Server Management Studio 2008

  2. Które tabele są bardziej wydajne, CTE czy tymczasowe?

  3. SQL Server:Filtruj dane wyjściowe sp_who2

  4. Wysyłanie wiadomości e-mail przez serwer SQL NIE powiodło się

  5. Wprowadzenie do SQL Server