select语句获取Oracle

时间:2017-03-29 10:11:06

标签: sql oracle oracle11g

我有两个VARCHAR2列的表格:

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

我想选择JV280JV320之间的所有trs_no

我尝试了正常但不起作用,因为我在结果中找到JV29

所以我也试着让JV280JV320之间的长度在它起作用之间但是当长度不同时失败了。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

trs_no分成两个字符的字符串前缀和数字后缀并单独比较它们:

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;