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

podziel alfa i numeryczne za pomocą sql

Jeśli część numeryczna jest zawsze na początku, możesz użyć tego:

PATINDEX('%[0-9][^0-9]%', ConcUnit)

aby uzyskać indeks ostatniej cyfry.

Tak więc:

DECLARE @str VARCHAR(MAX) = '4000 ug/ML' 

SELECT LEFT(@str, PATINDEX('%[0-9][^0-9]%', @str )) AS Number,
       LTRIM(RIGHT(@str, LEN(@str) - PATINDEX('%[0-9][^0-9]%', @str ))) As Unit

daje:

Number  Unit
-------------
4000    ug/ML

EDYTUJ:

Jeśli dane liczbowe zawierają również podwójne wartości, możesz użyć tego:

SELECT LEN(@str) - PATINDEX ('%[^0-9][0-9]%', REVERSE(@str))

aby uzyskać indeks ostatniej cyfry .

Tak więc:

SELECT LEFT(@str, LEN(@str) - PATINDEX ('%[^0-9][0-9]%', REVERSE(@str)))

daje część numeryczną.

A to:

SELECT LEFT(@str, LEN(@str) - PATINDEX ('%[^0-9][0-9]%', REVERSE(@str))) AS Numeric,
       CASE 
          WHEN CHARINDEX ('%', @str) <> 0 THEN LTRIM(RIGHT(@str, LEN(@str) - CHARINDEX ('%', @str)))
          ELSE LTRIM(RIGHT(@str, PATINDEX ('%[^0-9][0-9]%', REVERSE(@str))))
       END AS Unit

daje zarówno część numeryczną, jak i jednostkową.

Oto kilka testów, które wykonałem na podstawie opublikowanych przez Ciebie danych:

Wejście:

DECLARE @str VARCHAR(MAX) = '50 000ug/ML'

Wyjście:

Numeric Unit
------------
50 000  ug/ML

Wejście:

DECLARE @str VARCHAR(MAX) = '99.5%'

Wyjście:

Numeric Unit
------------
99.5    

Wejście:

DECLARE @str VARCHAR(MAX) = '4000 . 35 % ug/ML'

Wyjście:

Numeric     Unit
------------------
4000 . 35   ug/ML


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sprawdź, czy plik istnieje, czy nie na serwerze sql?

  2. Właściwy sposób na zaimplementowanie unikalnego ograniczenia, które pozwala na wiele wartości NULL w SQL Server

  3. Sparametryzuj klauzulę SQL IN

  4. Dlaczego i kiedy LEFT JOIN z warunkiem w klauzuli WHERE nie jest równoznaczny z tym samym LEFT JOIN w klauzuli ON?

  5. Zapytanie o listę wszystkich procedur składowanych