저장 프로 시저의 고정 너비 파일에서 열을 추출하는 방법

전표

텍스트 형식의 보고서가 있습니다. 이 텍스트 파일을 테이블의 한 열에로드 한 다음 저장된 proc을 작성하여 텍스트 파일을 열로 분할해야합니다. 아래는 내 텍스트 파일의 샘플입니다.

XXX XXXXXXX                                                                                                       XXXXXX XXXXX XXXXX                                    
XXX, XX 70000-80000                                         01/01/2000  To  01/31/2000                               XXXXX XX 00000                                       
                                                            Fax Number 100 100-1010                                                                                       
*** Note: DO NOT MAIL                                                                                                                                                     

 Id         Name         #_No       #_No_1       Co-Pay        Paid Amount       Admin Fees     Misc Charges         Amount Due
---------------------------------------------------------------------------------------------------------------------------------------------------------
Q10000000  QQQQQQ       330         144         4,740.24-         33,167.74             0.00           690.00          29,117.50 


Q10000001  YYYYYY       1,503        694        12,588.88-        269,629.24             0.00         2,880.00         259,920.36 


Q10000002  MMMMMM        106          20         2,395.50-         13,672.42             0.00           270.00          11,546.92 


Q10000003  NNNNNNN        481         174         5,947.75-         32,983.23             0.00           810.00          27,845.48 

XXX XXXXXXX                                                                                                       XXXXXX XXXXX XXXXX                                    
XXX, XX 70000-80000                                         02/01/2000  To  02/31/2000                               XXXXX XX 00000                                       
                                                            Fax Number 100 100-1010                                                                                       
*** Note: DO NOT MAIL                                                                                                                                                     

 Id         Name         #_No       #_No_1       Co-Pay        Paid Amount       Admin Fees     Misc Charges         Amount Due
---------------------------------------------------------------------------------------------------------------------------------------------------------
Q10000000  QQQQQQ       330         144         4,740.24-         33,167.74             0.00           690.00          29,117.50 


Q10000001  YYYYYY       1,503        694        12,588.88-        269,629.24             0.00         2,880.00         259,920.36 


Q10000002  MMMMMM        106          20         2,395.50-         13,672.42             0.00           270.00          11,546.92 


Q10000003  NNNNNNN        481         174         5,947.75-         32,983.23             0.00           810.00          27,845.48 

위의 보고서는 표에서 하나의 열로 이동하여 보고서를 여러 열로 분할합니다. 열은 형식 아래에 있습니다.

Id         Name         #_No       #_No_1       Co-Pay        Paid Amount       Admin Fees     Misc Charges       Amount Due     start_date     End_Date

Start_Date =01/01/2000 and 02/01/2000
end_date=01/31/2000 and 02/31/2000 

헤더에서 가져온 것입니다. 저장 프로 시저에서 이러한 열을 어떻게 추출합니까? 도움을 주시면 감사하겠습니다.

존 카펠 레티

두 개의 UDF와 한 개의 교차 적용 (또는 두 개)의 도움으로

샘플 데이터 생성

Declare @YourTable table (ID int,Report varchar(max))
Insert Into @YourTable values
(1,'
XX XXXXXXX                                                                                                       XXXXXX XXXXX XXXXX                                    
XXX, XX 70000-80000                                         01/01/2000  To  01/31/2000                               XXXXX XX 00000                                       
                                                            Fax Number 100 100-1010                                                                                       
*** Note: DO NOT MAIL                                                                                                                                                     

 Id         Name         #_No       #_No_1       Co-Pay        Paid Amount       Admin Fees     Misc Charges         Amount Due
---------------------------------------------------------------------------------------------------------------------------------------------------------
Q10000000  QQQQQQ       330         144         4,740.24-         33,167.74             0.00           690.00          29,117.50 


Q10000001  YYYYYY       1,503        694        12,588.88-        269,629.24             0.00         2,880.00         259,920.36 


Q10000002  MMMMMM        106          20         2,395.50-         13,672.42             0.00           270.00          11,546.92 


Q10000003  NNNNNNN        481         174         5,947.75-         32,983.23             0.00           810.00          27,845.48 

XXX XXXXXXX                                                                                                       XXXXXX XXXXX XXXXX                                    
XXX, XX 70000-80000                                         02/01/2000  To  02/31/2000                               XXXXX XX 00000                                       
                                                            Fax Number 100 100-1010                                                                                       
*** Note: DO NOT MAIL                                                                                                                                                     

 Id         Name         #_No       #_No_1       Co-Pay        Paid Amount       Admin Fees     Misc Charges         Amount Due
---------------------------------------------------------------------------------------------------------------------------------------------------------
Q10000000  QQQQQQ       330         144         4,740.24-         33,167.74             0.00           690.00          29,117.50 


Q10000001  YYYYYY       1,503        694        12,588.88-        269,629.24             0.00         2,880.00         259,920.36 


Q10000002  MMMMMM        106          20         2,395.50-         13,672.42             0.00           270.00          11,546.92 


Q10000003  NNNNNNN        481         174         5,947.75-         32,983.23             0.00           810.00          27,845.48 
')

쿼리 예

Select A.ID
      ,[Date1]       = left(B.Date,10)
      ,[Date2]       = right(B.Date,10)
      ,[Row ID]      = C.Pos1
      ,[Name]        = C.Pos2
      ,[#_No]        = try_convert(int,try_convert(money,C.Pos3))
      ,[#_No_1]      = try_convert(int,try_convert(money,C.Pos4))
      ,[Co-Pay]      = try_convert(money,IIF(right(Pos5,1)='-','-','')+replace(Pos5,'-',''))
      ,[Paid Amount] = try_convert(money,IIF(right(Pos6,1)='-','-','')+replace(Pos6,'-',''))
      ,[Admin Fees]  = try_convert(money,IIF(right(Pos7,1)='-','-','')+replace(Pos7,'-',''))
      ,[Misc Charges]= try_convert(money,IIF(right(Pos8,1)='-','-','')+replace(Pos8,'-',''))
      ,[Amount Due]  = try_convert(money,IIF(right(Pos9,1)='-','-','')+replace(Pos9,'-','')) 
 from @YourTable A
 Cross Apply (
               Select RetSeq,RetVal,Date = max(Date) over (Order by RetSeq)
               From (
                       Select *
                             ,Date = case when patindex('%__/__/____|To|__/__/____%',RetVal)=0 then '' else substring(RetVal,patindex('%__/__/____|To|__/__/____%',RetVal),24) end
                        From  [dbo].[udf-Str-Parse](replace(replace(replace(replace(A.Report,'  ','||'),'|','<>'),'><',''),'<>','|'),char(13)) 
                    ) B1
             ) B
 Cross Apply [dbo].[udf-Str-Parse-Row](B.RetVal,'|') C
 Where try_convert(money,Pos4) is not null
 Order By B.RetSeq

보고

여기에 이미지 설명 입력

관심이있는 경우 두 개의 UDF

CREATE FUNCTION [dbo].[udf-Str-Parse] (@String varchar(max),@Delimiter varchar(10))
Returns Table 
As
Return (  
    Select RetSeq = Row_Number() over (Order By (Select null))
          ,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)')))
    From  (Select x = Cast('<x>' + replace((Select replace(@String,@Delimiter,'§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml).query('.')) as A 
    Cross Apply x.nodes('x') AS B(i)
);
--Thanks Shnugo for making this XML safe
--Select * from [dbo].[udf-Str-Parse]('Dog,Cat,House,Car',',')
--Select * from [dbo].[udf-Str-Parse]('John Cappelletti was here',' ')
--Select * from [dbo].[udf-Str-Parse]('this,is,<test>,for,< & >',',')

과...

CREATE FUNCTION [dbo].[udf-Str-Parse-Row] (@String varchar(max),@Delimiter varchar(10))
Returns Table 
As
Return (
    Select Pos1 = ltrim(rtrim(xDim.value('/x[1]','varchar(max)')))
          ,Pos2 = ltrim(rtrim(xDim.value('/x[2]','varchar(max)')))
          ,Pos3 = ltrim(rtrim(xDim.value('/x[3]','varchar(max)')))
          ,Pos4 = ltrim(rtrim(xDim.value('/x[4]','varchar(max)')))
          ,Pos5 = ltrim(rtrim(xDim.value('/x[5]','varchar(max)')))
          ,Pos6 = ltrim(rtrim(xDim.value('/x[6]','varchar(max)')))
          ,Pos7 = ltrim(rtrim(xDim.value('/x[7]','varchar(max)')))
          ,Pos8 = ltrim(rtrim(xDim.value('/x[8]','varchar(max)')))
          ,Pos9 = ltrim(rtrim(xDim.value('/x[9]','varchar(max)')))
    From  (Select Cast('<x>' + replace((Select replace(@String,@Delimiter,'§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as A 
)
--Thanks Shnugo for making this XML safe
--Select * from [dbo].[udf-Str-Parse-Row]('Dog,Cat,House,Car',',')

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

저장 프로 시저 쿼리에서 새 열을 정의하는 방법

분류에서Dev

Nemo 파일 관리자에서 열 너비를 저장 / 고정하는 방법은 무엇입니까?

분류에서Dev

C #의 저장 프로 시저에서 설정 값을 가져 오는 방법

분류에서Dev

SSIS를 통해 하나의 저장 프로 시저에서 여러 파일을 출력하는 방법

분류에서Dev

Sybase의 저장 프로 시저에서 XML 출력 파일을 생성하는 방법은 무엇입니까?

분류에서Dev

Sybase의 저장 프로 시저에서 XML 출력 파일을 생성하는 방법은 무엇입니까?

분류에서Dev

목록 개체의 속성을 추출하고 저장 프로 시저로 전달하는 방법

분류에서Dev

사용자 정의 형식의 배열을 저장 프로 시저에 전달하는 방법

분류에서Dev

저장 프로 시저의 출력 변수에 쿼리 값을 설정하는 방법

분류에서Dev

테이블의 각 열 값을 저장 프로 시저로 전달하고 결과를 SQL-Server의 테이블에 저장하는 방법

분류에서Dev

Postgres에서 업데이트하기 전에 특정 열의 기록을 저장하는 저장 프로 시저를 만드는 방법

분류에서Dev

동일한 저장 프로 시저에서 열 값을 참조하는 방법

분류에서Dev

SQL Server 2012의 저장 프로 시저에서 동적으로 테이블 이름을 지정하는 방법

분류에서Dev

txt 파일을 읽고 html의 javascript로 배열에 저장하는 방법

분류에서Dev

모든 csv 파일에서 n 열을 추가하고 다른 csv 파일에 저장하는 방법 (헤더가 열의 출처 인 파일 이름 임)?

분류에서Dev

파이썬으로 저장 프로 시저의 입력 값을 수정하는 방법

분류에서Dev

DocumentDB의 저장 프로 시저 내에서 "피드 옵션"을 설정하는 방법은 무엇입니까?

분류에서Dev

텍스트를 파일에 저장하고 다시 읽는 방법을 자바 스크립트에 바이너리로 저장하는 방법

분류에서Dev

R의 큰 고정 너비 파일에서 특정 열을 읽는 방법

분류에서Dev

Oracle SQL의 저장 프로 시저에서 XML 파일을 읽는 방법은 무엇입니까?

분류에서Dev

저장 프로 시저에서 문자열을 정수로 변환하는 방법

분류에서Dev

파일에서 특정 줄을 추출하고 Python의 각 새 파일에 특정 줄을 저장하는 방법

분류에서Dev

프로 시저 이름을 문자열로 전달하지 않고 저장소 패턴을 사용하여 저장 프로 시저를 호출하는 방법

분류에서Dev

저장 프로 시저를 사용하지 않고 모든 테이블에서 문자열을 찾는 방법

분류에서Dev

저장 프로 시저를 사용하여 루프에서 SQL 열의 값을 구문 분석하는 방법

분류에서Dev

저장 프로 시저에서 특정 문자열 항목을 검색하는 방법

분류에서Dev

Stream Analytics 출력을 저장 프로 시저로 설정하는 방법

분류에서Dev

저장 프로 시저에서 xml을 반복하는 방법

분류에서Dev

SQL Server에서 저장 프로 시저를 사용하여 중복 값을 열의 고유 한 값으로 변경하는 방법

Related 관련 기사

  1. 1

    저장 프로 시저 쿼리에서 새 열을 정의하는 방법

  2. 2

    Nemo 파일 관리자에서 열 너비를 저장 / 고정하는 방법은 무엇입니까?

  3. 3

    C #의 저장 프로 시저에서 설정 값을 가져 오는 방법

  4. 4

    SSIS를 통해 하나의 저장 프로 시저에서 여러 파일을 출력하는 방법

  5. 5

    Sybase의 저장 프로 시저에서 XML 출력 파일을 생성하는 방법은 무엇입니까?

  6. 6

    Sybase의 저장 프로 시저에서 XML 출력 파일을 생성하는 방법은 무엇입니까?

  7. 7

    목록 개체의 속성을 추출하고 저장 프로 시저로 전달하는 방법

  8. 8

    사용자 정의 형식의 배열을 저장 프로 시저에 전달하는 방법

  9. 9

    저장 프로 시저의 출력 변수에 쿼리 값을 설정하는 방법

  10. 10

    테이블의 각 열 값을 저장 프로 시저로 전달하고 결과를 SQL-Server의 테이블에 저장하는 방법

  11. 11

    Postgres에서 업데이트하기 전에 특정 열의 기록을 저장하는 저장 프로 시저를 만드는 방법

  12. 12

    동일한 저장 프로 시저에서 열 값을 참조하는 방법

  13. 13

    SQL Server 2012의 저장 프로 시저에서 동적으로 테이블 이름을 지정하는 방법

  14. 14

    txt 파일을 읽고 html의 javascript로 배열에 저장하는 방법

  15. 15

    모든 csv 파일에서 n 열을 추가하고 다른 csv 파일에 저장하는 방법 (헤더가 열의 출처 인 파일 이름 임)?

  16. 16

    파이썬으로 저장 프로 시저의 입력 값을 수정하는 방법

  17. 17

    DocumentDB의 저장 프로 시저 내에서 "피드 옵션"을 설정하는 방법은 무엇입니까?

  18. 18

    텍스트를 파일에 저장하고 다시 읽는 방법을 자바 스크립트에 바이너리로 저장하는 방법

  19. 19

    R의 큰 고정 너비 파일에서 특정 열을 읽는 방법

  20. 20

    Oracle SQL의 저장 프로 시저에서 XML 파일을 읽는 방법은 무엇입니까?

  21. 21

    저장 프로 시저에서 문자열을 정수로 변환하는 방법

  22. 22

    파일에서 특정 줄을 추출하고 Python의 각 새 파일에 특정 줄을 저장하는 방법

  23. 23

    프로 시저 이름을 문자열로 전달하지 않고 저장소 패턴을 사용하여 저장 프로 시저를 호출하는 방법

  24. 24

    저장 프로 시저를 사용하지 않고 모든 테이블에서 문자열을 찾는 방법

  25. 25

    저장 프로 시저를 사용하여 루프에서 SQL 열의 값을 구문 분석하는 방법

  26. 26

    저장 프로 시저에서 특정 문자열 항목을 검색하는 방법

  27. 27

    Stream Analytics 출력을 저장 프로 시저로 설정하는 방법

  28. 28

    저장 프로 시저에서 xml을 반복하는 방법

  29. 29

    SQL Server에서 저장 프로 시저를 사용하여 중복 값을 열의 고유 한 값으로 변경하는 방법

뜨겁다태그

보관