我在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
答案 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个/
,您可以将可选的第三个参数传递给CHARINDEX
(start_location
),告诉它开始照看第一个参数。
SELECT [orde_reference],
SUBSTRING([orde_reference],
CHARINDEX('/', [orde_reference],1 + CHARINDEX('/', [orde_reference])) + 1,
LEN([orde_reference])) AS batch
FROM Orders
最好将这些组件单独存储在不同的列中。