2014-04-05 63 views
-1

我有一個字段,其中包含以下「格式化」的數據:「XYZ100320C00027500」。在此:查詢從字符串中提取數據

  • XYZ - 符號(最多6個字符)
  • 10 - 年(2個字符)
  • 03 - 月(2個字符)
  • 20 - 天(2個字符)
  • ç - 呼叫/放(C或P)
  • 00027 - 行使元(5個字符)
  • 500 - 行使十進制(3個字符)

從這個領域我需要提取符號,日期(月/日/年),呼叫/放置,罷工(罷工美元+罷工小數)。我需要提取這些並將它們放在一張表中的自己的列中。

任何幫助或方向與如何做到這一點與SQL查詢將不勝感激。

+0

什麼DB引擎你用? –

+0

我正在使用SQL,我對它很新。我真的不知道該怎麼嘗試,這就是爲什麼我要求任何幫助或方向。如示例中提到的 – user3368353

+0

,除符號之外的所有其他字段將包含固定長度值。意味着它會發生「罷工美元」限制高達5個字符,但它只有「27」被排除在「00027」之外。 – AK47

回答

0

這應該工作,雖然它可能不是太有效率...

SQL Fiddle

MS SQL Server 2012的架構設置

CREATE TABLE Table1 
    (the_string varchar(21)) 
; 

INSERT INTO Table1 
    (the_string) 
VALUES 
    ('XYZ100320C00027500'), 
    ('ABCDEF120410C00022540') 
; 

查詢1

SET DATEFORMAT ymd 
SELECT 

    SUBSTRING(the_string, 0, PATINDEX('%[0-9]%', the_string)) AS [Symbol], 
    CAST(SUBSTRING(the_string, PATINDEX('%[0-9]%', the_string), 2) + '-' + SUBSTRING(the_string, PATINDEX('%[0-9]%', the_string)+2, 2) + '-' + SUBSTRING(the_string, PATINDEX('%[0-9]%', the_string)+4, 2) AS DATE) AS [Date], 
    SUBSTRING(the_string, PATINDEX('%[0-9]%', the_string)+6, 1) AS [Call/Put], 
    CAST(SUBSTRING(the_string, PATINDEX('%[0-9]%', the_string)+7, 5) AS FLOAT) + CAST(SUBSTRING(the_string, PATINDEX('%[0-9]%', the_string)+12, 3) AS FLOAT)/1000 AS [Strike] 

FROM table1 

Results

| SYMBOL |  DATE | CALL/PUT | STRIKE | 
|--------|------------|----------|--------| 
| XYZ | 2010-03-20 |  C | 27.5 | 
| ABCDEF | 2012-04-10 |  C | 22.54 | 
+0

正是我在找的東西。一切都很好!一個很好的學習機會。謝謝。 – user3368353