1

我在 SQL 2008 中有一个查询

SELECT [orde_reference],
       SUBSTRING([orde_reference], 
                  CHARINDEX('/', [orde_reference]) + 1, 
                  LEN([orde_reference])) AS batch
FROM   Orders 

这将返回以下内容

orde_reference:        27777/2012/1          
batch:                 2012/1

但是我需要批次只是最后一个 / 之后的字符(varchar 中总是有 2 x '/'

orde_reference:        27777/2012/1          
batch:                 1

任何帮助,将不胜感激。

干杯米姆

4

3 回答 3

2

尝试

SELECT orde_reference,
       RIGHT(orde_reference, CHARINDEX('/', REVERSE(orde_reference)) - 1) batch
  FROM orders

样本输出:

| ORDE_REFERENCE | 批次 |
--------------------------
| 27777/2012/1 | 1 |
| 27734/2013/11 | 11 |

这是SQLFiddle演示

于 2013-06-13T07:53:48.027 回答
1

由于总是有 2 个,因此/您可以将可选的第三个参数传递给CHARINDEX( start_location) 以告诉它开始处理第一个参数。

SELECT [orde_reference],
       SUBSTRING([orde_reference], 
                  CHARINDEX('/', [orde_reference],1 + CHARINDEX('/', [orde_reference])) + 1, 
                  LEN([orde_reference])) AS batch
FROM   Orders 

您最好将这些组件单独存储在单独的列中。

于 2013-06-13T07:51:12.803 回答
0

使用 REVERSE 两次;)

SELECT [orde_reference]
  ,REVERSE(SUBSTRING(reverse([orde_reference]), 0, CHARINDEX('/', reverse([orde_reference])))) AS batch
  from (values(
  ' 27777/2012/123'
  )) as O([orde_reference])
于 2013-06-13T07:47:00.570 回答