2016-02-05 121 views
2

我有一個包含發票和估算數字的表格。發票號碼就像"IN1000","IN1001","IN1002"等等。估算數字就像"ES101","ES102","ES103"。如何獲得我的發票和估算的最大值?我也希望它被丟在一個整數像1000如何使用字母數字字符串從列中獲取最大值?

我曾嘗試以下查詢:

SELECT Max(CAST (SUBSTR(invoiceNo,3) AS UNSIGNED)) FROM selected_items 
WHERE invoiceNo RLIKE 'IN'; 

當我運行此查詢我得到以下錯誤:

# 1064 - 你的SQL語法錯誤;檢查手冊中 對應於你的MySQL服務器版本正確的語法使用 接近「無符號))FROM selected_items WHERE invoiceNo RLIKE‘IN’」在 線1

,我使用類似的方法進行估計:

SELECT Max(CAST (SUBSTR(invoiceNo,3) AS UNSIGNED)) FROM selected_items 
WHERE invoiceNo RLIKE 'ES'; 

我該如何在一個查詢中執行這兩個操作?任何幫助表示讚賞。謝謝。

+0

感謝您的編輯@FelixPamittan你能幫助解決方案嗎? – AndroidNewBee

+0

不,我只看到這個問題,因爲它出現在我遵循的標籤下。 –

+0

我懷疑你的'invoiceNo'列中可能有一些額外的字符。這就是'CAST'失敗的原因。你能向我們展示一些樣本數據嗎? –

回答

1

我相信你的invoiceNo列有一些額外的字符,即使在使用SUBSTR()後仍然存在。這導致CAST失敗,因爲非數字字符仍然存在。如果這些額外的字符是空白,那麼TRIM()功能可能會派上用場:

SELECT MAX(CAST(SUBSTR(TRIM(invoiceNo),3) AS UNSIGNED)) 
FROM selected_items 
WHERE invoiceNo RLIKE 'IN' 

由於@Tah指出,這裏是一個鏈接,可以幫助你去除所有字母數字字符,如果它來的:

MySQL strip non-numeric characters to compare

更新:

如果你想在這兩個最大值一個查詢,一個辦法是你提到的兩個查詢的UNION

SELECT 'invoiceMax', MAX(CAST(SUBSTR(TRIM(invoiceNo),3) AS UNSIGNED)) 
FROM selected_items 
WHERE invoiceNo RLIKE 'IN' 
UNION 
SELECT 'estimateMax', MAX(CAST(SUBSTR(TRIM(invoiceNo),3) AS UNSIGNED)) 
FROM selected_items 
WHERE invoiceNo RLIKE 'ES' 
+0

Ya this works but but how我在不寫新查詢的情況下爲「ES」做同樣的事情。 – AndroidNewBee

+1

非常感謝你Tim :) – AndroidNewBee

1

可以使用條件的聚集結合您的疑問:

select 
    max(case when invoiceNo rlike 'IN' then (your value here) end) maxIn, 
    max(case when invoiceNo like 'ES' then (your value here) end) maxEs 
from selected_items 
where invoiceNo rlike 'IN' 
or invoiceNo like 'ES' 

另一種方法是使用子查詢。我不確定哪個運行速度更快,因此您可能需要測試兩者。

select 
    (your in query) as maxIn, 
    (your en query) as maxEn 
+0

非常感謝你@Fuzzytree :) – AndroidNewBee

2

由@FuzzyTree和@TimBiegeleisen建議您可以嘗試以下查詢。

Select (SELECT MAX(CAST(SUBSTR(TRIM(invoiceNo),3) AS UNSIGNED)) 
FROM selected_items 
WHERE invoiceNo RLIKE 'IN') as maxIN, 
(SELECT MAX(CAST(SUBSTR(TRIM(invoiceNo),3) AS UNSIGNED)) 
FROM selected_items 
WHERE invoiceNo RLIKE 'ES') as maxES; 
+0

非常感謝你@anup :) – AndroidNewBee

相關問題