sql >> Databáze >  >> RDS >> Sqlserver

rozdělení alfa a čísel pomocí sql

Pokud je číselná část vždy na začátku, můžete použít toto:

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

pro získání indexu poslední číslice.

Tedy toto:

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

vám dává:

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

UPRAVIT:

Pokud číselná data obsahují také dvojité hodnoty, můžete použít toto:

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

získáte index poslední číslice .

Tedy toto:

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

vám poskytne numerickou část.

A toto:

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

poskytuje jak číselnou, tak jednotkovou část.

Zde je několik testů, které jsem provedl s údaji, které jste zveřejnili:

Vstup:

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

Výstup:

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

Vstup:

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

Výstup:

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

Vstup:

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

Výstup:

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


  1. Návrh datového modelu pro systém rezervace hotelových pokojů

  2. Jak formátovat čísla jako měnu v MySQL

  3. Zdroj dat MySQL se ve Visual Studiu nezobrazuje

  4. Jak získám ID po INSERT do databáze MySQL pomocí Pythonu?