2017-03-29 27 views
0

我有表有两个VARCHAR2列:select语句来获得两个字符串之间的值在甲骨文

trs_no trs_name 
------ -------- 
JV1 ddd 
.  . 
.  . 
.  . 
JV580 deee 

我想选择例如JV280JV320

之间的所有trs_no我试过之间的正常的,但没有工作,因为我发现JV29的结果

所以我也试图得到JV280JV320之间的长度它之间的工作ked,但长度不同时失败。

我该如何解决这个问题?

回答

2

斯普利特trs_no成两个字符的字符串前缀和数字后缀和seperately对它们进行比较:

SELECT * 
FROM your_table 
WHERE SUBSTR(trs_no, 1, 2) = 'JV' 
AND TO_NUMBER(SUBSTR(trs_no, 3)) BETWEEN 280 AND 320 

如果trs_no可以有不同大小的字符串前缀,那么你可以使用正则表达式:

SELECT * 
FROM your_table 
WHERE REGEXP_SUBSTR(trs_no, '^(\D+)(\d+)$', 1, 1, NULL, 1) = 'JV' 
AND TO_NUMBER(REGEXP_SUBSTR(trs_no, '^(\D+)(\d+)$', 1, 1, NULL, 2)) 
     BETWEEN 280 AND 320; 
+0

它的工作良好的SQL加,但在oracle形式不! –

+0

有没有更简单的方法? –

+0

@AbdelrhmanHesham您可以将几个虚拟列添加到表中,然后从表单中选择它们。 – MT0