sql查询用特定单词拆分一行

时间:2012-12-05 10:33:33

标签: sql sql-server-2008

我的结果是

code     Declaration      Quantity
123      a1                11boxes Note:(Each box Contains 20nos)
123      a2                230nos Note:(Each contains 100nos)
123      a3                60nos

我需要显示为

code     Declaration      Quantity
123      a1                11boxes 
123      a2                230nos 
123      a3                60nos

是否可以拆分线并在注释前显示?

4 个答案:

答案 0 :(得分:1)

你可以使用sql server-2008的CHARINDEX()函数获取长度并使用0到length - 1来使用SUBSTR()来剪切字符

答案 1 :(得分:1)

或者,如果您认为某些数量可能没有Note:尝试;

select code, declaration, 
       SUBSTRING(Quantity,0,
             CASE WHEN charindex('Note:',Quantity,0)> 0 
                  THEN charindex('Note:',Quantity,0) 
             ELSE LEN(Quantity)+1 END) AS Quantity
From YourTable

答案 2 :(得分:0)

您可以在quantity字段中搜索单词note以返回结果,但此答案假定任何音符都不会以不同的单词开头。

如果您要查看note,那么您可以使用charindex(),类似于:

select code, 
  declaration, 
  case 
    when charindex('Note', quantity) > 0
    then rtrim(left(quantity, charindex('Note', quantity)-1))
    else quantity end as Quantity
from yourtable

请参阅SQL Fiddle with Demo

结果是:

| CODE | DECLARATION | QUANTITY |
---------------------------------
|  123 |          a1 |  11boxes |
|  123 |          a2 |   230nos |
|  123 |          a3 |    60nos |

答案 3 :(得分:0)

select code,declaration, case  when patindex('% %',ltrim(quantity))>0 
             then substring(ltrim(descr),0,patindex('% %',ltrim(quantity)))
             else quantity end 
      as quantity
from table_name

quantity列值中提取子字符串,直到第一次出现空格字符。 '% %'

LTRIM删除任意数量的前导空格,否则查询将导致错误的结果。

PATINDEX():返回指定表达式中第一次出现模式的起始位置,该模式是此处的空格字符。

即使列值中没有“注意:”字符串,这也会有效。