2014-11-04 39 views
1

我試圖從一組行中獲取最高系統編號。該系統編號前面帶有SYS,從而select SYSTEM_ID from TABLE會產生,{SYS901,SYS87,SYS3024.....}Oracle SQL MAX函數不會將VARCHAR上的最大值返回到NUMBER轉換

這是我試圖使用查詢:

select MAX(REPLACE(SYSTEM_ID,'SYS','')) from TABLE

可能的結果是

{901,87,3024,20,1}

它返回901值,我期望看到3024值。我假設問題是該字段是VARCHAR而不是NUMBER。如何解決這個問題,我不知道。

+0

刪除'sql-server'標籤 - 這個問題是關於** Oracle ** - 不是(微軟)SQL Server ..... – 2014-11-04 15:52:56

回答

9
select MAX(TO_NUMBER(REPLACE(SYSTEM_ID,'SYS',''))) from TABLE; 

使用TO_NUMBER到VARCHAR2轉換爲NUMBER否則甲骨文使用ASCII碼比較字符串( '9'> '3')

+0

這樣做了。謝謝。 – 2014-11-04 15:54:09

5

當然它返回最大。它只是根據字符串比較的規則返回最大值,而不是數字。

要獲得數字最大,做了轉換:

select MAX(TO_NUMBER(REPLACE(SYSTEM_ID, 'SYS', ''))) from TABLE 
0

你可能要考慮的情況下,你在你的表像「SYS5001B」有價值觀做一個「安全」的號碼變換:

SELECT MAX(TO_NUMBER(COALESCE(REGEXP_SUBSTR(system_id, '\d+'), '0'))) 
    FROM table