查询从字符串中提取数据

时间:2014-04-05 11:18:55

标签: sql string extract

我有一个字段,其中包含以下内容"格式化"数据:" XYZ100320C00027500"。在这:

  • XYZ - 符号(最多6个字符)
  • 10年(2个字符)
  • 03 - 月(2个字符)
  • 20天(2个字符)
  • C - 通话/看跌(C或P)
  • 00027 - 罢工美元(5个字符)
  • 500 - Strike Decimal(3个字符)

从这个字段我需要提取符号,日期(月/日/年),看涨/看跌,罢工(点击美元+点击小数)。我需要提取这些并将它们放在一个表中的各自列中。

非常感谢任何有关如何使用SQL查询执行此操作的帮助或指导。

1 个答案:

答案 0 :(得分: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 |