2014-03-04 18 views
-1

我在SQLite的一表「produit」我想要得到的分而不是由subtring「規範」表的行,這是我的查詢:查詢MIN()SUBSTR()SQLite中

select MIN (substr(Code_produit,1,charindex('-',Code,1))+1) 
from produit 
where (substr(Code,1,charindex('-',Code_produit,1)) + 1) 
     not in (select (substr(Code,1,charindex('-',Code_produit,1))) from produit) 

例如:我的行數據「代碼」是這樣的「PRD-1」

+0

我不知道你*的意思,但我想查詢不會在以下數據existe最小,在本例就必須2 *,請提供表格模式,一些示例數據和預期的結果。 – 2014-03-04 22:55:03

+0

我有以下數據: 列代碼 PRD-13 PRDF -4- ADQ-1 ASFS-77 AGXX-9 AMXX-14 AXX-17 我希望查詢的最小值的第二方(後 - )不存在以下數據,在這個例子中它必須是2 我做一個但它不起作用 選擇MIN(substr(Code,charindex('_',Code) +1)+1)from produit where(substr(Code,charindex('_',Code)+1)+ 1)not in(select(substr(Code,charindex('_',Code)+1))from produit) – nasrsoft

+0

來自w這2個來自哪裏? – 2014-03-04 23:15:00

回答

0

以下查詢將從代碼中提取所有的數字:

SELECT CAST(substr(code, instr(code, '-') + 1) AS INTEGER) 
FROM produit 

(所提取的子被明確地轉換成整數因爲字符串和數字不會正確地比較)

該查詢可以用來尋找你的價值。

WITH numbers(n) 
AS (SELECT CAST(substr(code, instr(code, '-') + 1) AS INTEGER) 
    FROM produit) 
SELECT MIN(n + 1) 
FROM numbers 
WHERE n + 1 NOT IN numbers 

如果您還沒有SQLite的3.8.3,則不能使用common table expressions,所以你必須要麼創建鑑於numbers,或將其插入查詢明確:

SELECT MIN(n + 1) 
FROM (SELECT CAST(substr(code, instr(code, '-') + 1) AS INTEGER) AS n 
     FROM produit) 
WHERE n + 1 NOT IN (SELECT CAST(substr(code, instr(code, '-') + 1) AS INTEGER) 
        FROM produit) 
+0

非常感謝我的兄弟,你是最棒的 – nasrsoft