2015-12-11 39 views
-2

我TRANSACTION_ID(VARCHAR)包含以下模式获取下一页交易号码

DXB1 
DXB2 
..... 
DXB15 
... 
DXB200 

下TRANSACTION_ID将DXB201,如何从SQL查询一个

我使用

SELECT MAX(transaction_id) AS Expr1 
FROM transaction_master 
WHERE (transaction_id LIKE 'DXB%') 

,但即使DXB15存在,即使查询返回DXB9,也无法给出正确的输出

+1

这串排序做什么。您需要拉出数字组件。你使用的是什么DBMS产品? SQL Server? MySQL的?甲骨文?还有别的吗? – Siyual

+1

你的问题是你要求你的RDBMS把一个varchar当作一个数字。您的查询以词典方式向您提供正确的结果; “DXB9”的确大于“D​​XB15”(它会在后来以字母顺序排列) –

+0

@Siyual:我使用SQLite作为后端C#作为前端 – user2130649

回答

2

如果所有继DXB部分字符是数字,下面应该工作:

Select 'DXB' || Next As NextTransactionId 
From 
(
    Select Max(Cast(Replace(Transaction_Id, 'DXB', '') As Int)) + 1 As Next 
    FROM  transaction_master 
    WHERE  (transaction_id LIKE 'DXB%') 
) 

SQLFiddle

+0

谢谢,它的工作,完美 – user2130649