2

我的结果是

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

4 回答 4

1

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

于 2012-12-05T10:42:55.620 回答
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
于 2012-12-05T10:44:50.823 回答
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 |
于 2012-12-05T10:43:56.050 回答
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() : 返回指定表达式中第一次出现模式的起始位置,这里的模式是空格字符。

即使列 value 中不存在"Note:"字符串,这也将起作用。

于 2012-12-05T11:09:17.623 回答