2015-08-25 48 views
1

我有下面的表有sequence numberStation codes。我想把兩個電臺之間的電臺列表。Oracle之間的字符值運算符

,如果我做

select Station Code 
from Table1 
where Station Code BETWEEN 'BWI' and 'PHL' 

應該給我基於這樣的順序站 - >(BWI,BAL,WIL,PHL)。

鑑於它是給我下面的電臺 - >(BWI,PHL,NWK,NYP)。

請讓我知道誰給我帶來了所需的值?我在下面的Table1中添加了示例數據。

表1

Sequence Number Station Code 
    1   WAS 
    2   BWI 
    3   BAL 
    4   WIL 
    5   PHL 
    6   NWK 
    7   NYP 
+0

我以表格的形式添加了表格,我不知道它爲什麼出現在一行中。我希望你們明白,它是一張雙列數據表,裏面有7行Data – Drake

+0

我只是爲你編輯:)。您需要在每行之前添加4個空格以代碼格式顯示 –

回答

0

問題是

'BWI' and 'PHL' 

將返回所有行代碼是那些作爲字符串比較討論之間。

你想

SELECT * 
FROM Table1 
WHERE Sequence Number 
    between (SELECT Sequence Number FROM Table1 WHERE Station Code ='BAL') 
    and (SELECT Sequence Number FROM Table1 WHERE Station Code ='PHL') 
0

,因爲它是標記有甲骨文,這裏是一個Oracle解決方案,並不需要多表掃描:

SQL Fiddle

的Oracle 11g R2架構設置

CREATE TABLE table1 (Sequence_Number, Station_Code) AS 
      SELECT 1, 'WAS' FROM DUAL 
UNION ALL SELECT 2, 'BWI' FROM DUAL 
UNION ALL SELECT 3, 'BAL' FROM DUAL 
UNION ALL SELECT 4, 'WIL' FROM DUAL 
UNION ALL SELECT 5, 'PHL' FROM DUAL 
UNION ALL SELECT 6, 'NWK' FROM DUAL 
UNION ALL SELECT 7, 'NYP' FROM DUAL 

查詢1

SELECT * 
FROM table1 
START WITH Station_Code = 'BWI' 
CONNECT BY PRIOR Sequence_Number = Sequence_Number - 1 
AND  PRIOR Station_Code <> 'PHL' 

Results

| SEQUENCE_NUMBER | STATION_CODE | 
|-----------------|--------------| 
|    2 |   BWI | 
|    3 |   BAL | 
|    4 |   WIL | 
|    5 |   PHL | 
1

如果你不知道該站的排序,你可以使用:

select t1.Code 
from Table1 t1 cross join 
    (select min(number) as minn, max(number) maxn 
     from table1 
     where code in ('BWI' and 'PHL') 
    tt 
where t1.number between minn and maxnn; 
+0

謝謝大家,我能夠根據您提出的解決方案獲得所需的結果 – Drake

0

SELECT * FROM表1

其中

(從表中選擇sequence_number其中站碼= 'BWI')

之間的序列(從表中選擇sequence_number其中站碼= 'PHL');

相關問題