2014-06-18 4 views
0

문자열에서 복용량과 측정 단위를 추출해야합니다. 문자열은 매우 유사한 패턴을 포함 할 수 있지만 그 다음에 오는 용량으로 문자열의 맨 처음 숫자를 추출하면됩니다. 예를 들어문자열에서 첫 번째 사용 가능한 숫자와 그 다음 텍스트를 추출합니다.

:

진통제. 20 밀리그램/100 ㎖ NS (0.2 ㎎/㎖) 치료 : IV PCA 성인/ 한정자 : 표준 연속 속도 = 0 밀리그램/시간, IV 루틴 PCA 투여 량 =

0.4 밀리그램

I은 ​​ 을 추출해야 복용량으로 20 및 Select 문에서 측정 단위로 사용되는 "mg"입니다.

아이디어가 있으십니까?

감사합니다.

+0

SELECT SUBSTRING ('통증 약물 20 밀리그램/NS 100 ㎖ (0.2 ㎎/㎖) 치료 :. IV PCA 성인/정자 : 표준 속도 = 0 연속 PATINDEX ('% [0-9] %', '진통제 20 mg/100 mL NS (0.2 mg/mL) 치료 : IV PCA 성인/한정어 : 표준 연속 속도 = 0 mg/hr, IV, 일상 PCA 투여 량 = 0.4 mg '), 5) - 장난감을 조금이라도 가지고 놀면 약간의 숫자를 다룰 수 있습니다. – TMNT2014

+0

여기를보십시오 : http://blogs.lessthandot.com/index.php/datamgmt/datadesign/extracting-numbers-with-sql-server/ –

+1

"통증 약물"은 항상 원하는 복용량보다 앞서 있습니까? 슬래시가 항상 따라 다니는가? –

답변

1

SQL Fiddle

MS SQL 서버 2008 스키마 설정 : 1

CREATE TABLE Table1 
    ([dosage] varchar(144)) 
; 

INSERT INTO Table1 
    ([dosage]) 
VALUES 
    ('Pain Medication. 20 mg/100 mL NS (0.2mg/mL) 
     Therapy: IV PCA Adult/Qualifier: Standard Continuous Rate = 0 mg/hr, 
     IV, Routine PCA Dose = 0.4 mg') 
; 

검색어 :

SELECT substring(dosage, 
       PATINDEX('%[0-9]%',dosage), 
       PATINDEX('%/%',dosage)-PATINDEX('%[0-9]%',dosage) 
       ) 
FROM Table1 

Results :

| COLUMN_0 | 
|----------| 
| 20 mg | 
1

--schema

CREATE TABLE script 
    (
    id int identity primary key, 
    details varchar(200) 
    ); 

INSERT INTO script 
(details) 
VALUES 
('Pain Medication. 20 mg/100 mL NS (0.2mg/mL) Therapy: IV PCA Adult/Qualifier: Standard Continuous Rate = 0 mg/hr, IV, Routine PCA Dose = 0.4 mg'), 
('Pain Medication. 300 mg/100 mL NS (0.2mg/mL) Therapy: IV PCA Adult/Qualifier: Standard Continuous Rate = 0 mg/hr, IV, Routine PCA Dose = 0.4 mg'); 

--Dosage

SELECT 
SUBSTRING(
SUBSTRING(
    details,PATINDEX('%[0-9]%',details), 
    (select (PATINDEX('%[/]%',details)-PATINDEX('%[0-9]%',details)))), 
    0, PATINDEX('%[ ]%',SUBSTRING(
    details,PATINDEX('%[0-9]%',details), 
    (select (PATINDEX('%[/]%',details)-PATINDEX('%[0-9]%',details)))))) as [Dosage] 
from script 

- 단위

SELECT 
SUBSTRING(
SUBSTRING(
    details,PATINDEX('%[0-9]%',details), 
    (select (PATINDEX('%[/]%',details)-PATINDEX('%[0-9]%',details)))), 
    PATINDEX('%[ ]%',SUBSTRING(
    details,PATINDEX('%[0-9]%',details), 
    (select (PATINDEX('%[/]%',details)-PATINDEX('%[0-9]%',details))))), 
3) as [Units] 
from script 

SQL 바이올린 : http://sqlfiddle.com/#!6/4e0b6/38

0

우아한 대답은 이미 주어졌지만 이것은 LEFT와 RIGHT 함수를 사용하는 부분 문자열 기능 없이도 수행 될 수 있습니다.

DECLARE @Mytext AS VARCHAR(200) 
SET @Mytext = 'Pain Medication. 20 mg/100 mL NS (0.2mg/mL) 
     Therapy: IV PCA Adult/Qualifier: Standard Continuous Rate = 0 mg/hr, 
     IV, Routine PCA Dose = 0.4 mg' 

SELECT LEFT(RIGHT(@Mytext, LEN(@Mytext) - (PATINDEX('%[0-9]%',@Mytext)-1)), 
     PATINDEX('%/%',RIGHT(@Mytext, LEN(@Mytext) 
     - (PATINDEX('%[0-9]%',@Mytext)-1)-1))) 

결과 :

20mg을

관련 문제