2017-04-25 41 views
-1

我有一個數據文件,可以將數據批量插入到臨時表中。SQL:如何根據某個字符模式從文件中獲取數據

此文件在某些​​行上具有類似的序列。

,000.00 10,000.00

..........

1527856778 6189580009 2017092 2015092 200,000.00 20,000.00

我做了一個散裝已經插入到表中了。

我需要從文件到一個臨時表中插入某些數據,因此具有

以下記錄:

這是一個序列2015091,其中2017年一年
  1. 文件的日期,91是一年中的一天。

    我有這樣的邏輯來得到一個日期:

    select dateadd(day, ltrim(rtrim(right('2017092',3))) - 1, DATEFROMPARTS(left('2017092',4) + 0, 1 ,1)) 
    

但是,這並不工作,當我變「2017092」爲[數據] - 從那裏我做了大部分的表中的列名插入:

select dateadd(day,right(ltrim(rtrim(substring([Data],34,15))),3) - 1, DATEFROMPARTS(left(substring([Data],34,15),4) + 0, 1, 1)) from Staging_Table 
where ltrim(rtrim(substring([Data],42,5))) = '92' 

該查詢給我0002-04-02代替2017-04-02

  • 總金額爲美元的總和相當於在每行的同一位置:
  • 所以,當插入結束我在臨時表中的以下內容:

    Date   Total1  Total2 
    2015-04-02 500,000,00 30,000,00 
    

    基本上,我需要獲得按日期分組的所有美元金額的總和。

    我該怎麼做這樣的事情?

    +1

    我不明白的問題。您應該將文件加載到表中,然後在表上執行查詢以獲取所需的摘要。 –

    +0

    標記您正在使用的dbms。 (您的聲明是特定於產品的。) – jarlh

    +0

    是的,基本上,我將文件中的數據加載到表中。現在我需要獲得正確的行,例如2017091序列。所以,我需要用'91'來代替,根據年份和日期編號,將'2017091'轉換爲'2017-04-02',我已經這麼做了。然後,我只需要按日期對數據進行分組,並獲得金額總和 – gene

    回答

    2

    這是假設您正在加載您的數據作爲一個字符串轉換爲一個場SomeCol

    Declare @YourTable table (SomeCol varchar(max)) 
    Insert Into @YourTable values 
    (',000.00 10,000.00'), 
    ('1527856778 6189580009 2017092 2015092 200,000.00 20,000.00') 
    
    Select Date = DateAdd(DAY,right(Pos3,3)-1,left(Pos3,4)+'0101') 
         ,Total1 = sum(try_convert(money,Pos5)) 
         ,Total2 = sum(try_convert(money,Pos6)) 
    From @YourTable A 
    Cross Apply (
           Select Pos3 = ltrim(rtrim(xDim.value('/x[3]','varchar(100)'))) 
             ,Pos5 = ltrim(rtrim(xDim.value('/x[5]','varchar(100)'))) 
             ,Pos6 = ltrim(rtrim(xDim.value('/x[6]','varchar(100)'))) 
           From (Select Cast('<x>' + replace((Select replace(A.SomeCol,' ','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as A 
          ) B 
    Group By Pos3 
    

    返回

    Date  Total1  Total2 
    2017-04-02 500000.00 30000.00 
    
    相關問題