SQL查看SUBSTRING和CHARINDEX

时间:2013-06-13 07:44:25

标签: sql sql-server-2008 tsql

我在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个'/'

orde_reference:        27777/2012/1          
batch:                 1

任何帮助都将不胜感激。

干杯 MIM

3 个答案:

答案 0 :(得分:2)

尝试

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

示例输出:

| ORDE_REFERENCE | BATCH |
--------------------------
|   27777/2012/1 |     1 |
|  27734/2013/11 |    11 |

这是 SQLFiddle 演示

答案 1 :(得分: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])

答案 2 :(得分:0)

由于总共有2个/,您可以将可选的第三个参数传递给CHARINDEXstart_location),告诉它开始照看第一个参数。

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

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