2016-06-04 3 views
0

У меня есть такие значения в моей таблице, и я хочу получить только числовое значение.SQL Server, как извлечь только числовые

Как я могу это сделать?

Благодаря

\physicaldisk(1 d:)\disk read bytes/sec    49920420.7711372 
\physicaldisk(2 e:)\disk read bytes/sec        0 
\physicaldisk(0 c:)\disk bytes/sec     1666197.41297793 
\physicaldisk(2 e:)\disk bytes/sec     4093.85113753791 
\physicaldisk(3 t:)\disk bytes/sec     4605.58252973014 
\physicaldisk(2 e:)\disk write bytes/sec    4093.85113753791 
\physicaldisk(3 t:)\disk write bytes/sec    4605.58252973014 
\physicaldisk(1 d:)\disk write bytes/sec    67073657.0374211 
\physicaldisk(3 t:)\disk read bytes/sec        0 
\physicaldisk(0 c:)\disk read bytes/sec    1567944.98567702 
\physicaldisk(1 d:)\disk bytes/sec     116994077.808558 
\physicaldisk(2 e:)\disk reads/sec         0 
\physicaldisk(3 t:)\disk reads/sec         0 
\physicaldisk(1 d:)\disk reads/sec     57.969571771777 
\physicaldisk(3 t:)\disk transfers/sec    8.99527837837919 
\physicaldisk(0 c:)\disk transfers/sec    71.9622270270335 
\physicaldisk(3 t:)\disk writes/sec     8.99527837837919 
\physicaldisk(0 c:)\disk writes/sec     2.9984261261264 
+0

вам, возможно, придется искать в Интернете 'SQL regex' и с помощью этого вы можете обнаружить десятичную Valus, а не текст – cramopy

+1

Можете ли вы просто найти первое пространство справа, а затем взять подстроку с этой позиции до конца? –

+0

Является ли номер физического диска всегда одной цифрой в одном положении? В противном случае вы можете найти первую открытую скобку и пробел и извлечь подстроку между ними. У вас было другое числовое значение? – HABO

ответ

4

Это работает в SQL Server:

select REVERSE(left(REVERSE(MyCol), charindex(' ', REVERSE(MyCol)) - 1)) 
from Table1 

SQL Fiddle

сервера Настройка MS SQL 2008 схемы:

CREATE TABLE Table1 
    ([MyCol] varchar(max)) 
; 

INSERT INTO Table1 
    ([MyCol]) 
VALUES 
    ('\physicaldisk(1 d:)\disk read bytes/sec    49920420.7711372'), 
('\physicaldisk(2 e:)\disk read bytes/sec        0'), 
('\physicaldisk(0 c:)\disk bytes/sec     1666197.41297793'), 
('\physicaldisk(2 e:)\disk bytes/sec     4093.85113753791'), 
('\physicaldisk(3 t:)\disk bytes/sec     4605.58252973014'), 
('\physicaldisk(2 e:)\disk write bytes/sec    4093.85113753791'), 
('\physicaldisk(3 t:)\disk write bytes/sec    4605.58252973014'), 
('\physicaldisk(1 d:)\disk write bytes/sec    67073657.0374211'), 
('\physicaldisk(3 t:)\disk read bytes/sec        0'), 
('\physicaldisk(0 c:)\disk read bytes/sec    1567944.98567702'), 
('\physicaldisk(1 d:)\disk bytes/sec     116994077.808558'), 
('\physicaldisk(2 e:)\disk reads/sec         0'), 
('\physicaldisk(3 t:)\disk reads/sec         0'), 
('\physicaldisk(1 d:)\disk reads/sec     57.969571771777'), 
('\physicaldisk(3 t:)\disk transfers/sec    8.99527837837919'), 
('\physicaldisk(0 c:)\disk transfers/sec    71.9622270270335'), 
('\physicaldisk(3 t:)\disk writes/sec     8.99527837837919'), 
('\physicaldisk(0 c:)\disk writes/sec     2.9984261261264') 

; 

Запрос 1:

select REVERSE(left(REVERSE(MyCol), charindex(' ',REVERSE(MyCol))-1)) 
from Table1 

Results:

|     | 
|------------------| 
| 49920420.7711372 | 
|    0 | 
| 1666197.41297793 | 
| 4093.85113753791 | 
| 4605.58252973014 | 
| 4093.85113753791 | 
| 4605.58252973014 | 
| 67073657.0374211 | 
|    0 | 
| 1567944.98567702 | 
| 116994077.808558 | 
|    0 | 
|    0 | 
| 57.969571771777 | 
| 8.99527837837919 | 
| 71.9622270270335 | 
| 8.99527837837919 | 
| 2.9984261261264 | 
+0

спасибо, что он работает хорошо – Avi

Смежные вопросы