2013-12-17 40 views
0

我想提出一個簡單的選擇查詢結果如下的子查詢的Sybase組 -SQL /由列值

select source_uri from image 

-

source_uri 

"image/30022/A.jpg" 
"image/30022/B.jpg" 
"image/30022/C.jpg" 
"image/30022/D.jpg" 
"image/30023/A.jpg" 
"image/30023/B.jpg" 
"image/30023/C.jpg" 
"image/30023/D.jpg" 
"image/30024/A.jpg" 
"image/30024/B.jpg" 
"image/30024/C.jpg" 
"image/30024/D.jpg" 

我想導致像 -

source_uri 

"image/30022/A.jpg" 
"image/30023/B.jpg" 
"image/30024/C.jpg" 

我嘗試過有一個group by子句......但它沒有按值分組,因爲值不同。

-

我能夠使用SUBSTRING_INDEX功能的MySQL。

在Sybase中尋找確切的備選方案。

+0

是否有結果的邏輯設置? – Strawberry

+0

邏輯是獲得不同的文件夾名稱 - 「image/30022」,「image/30023」... – webExplorer

+0

因此,「image/30022/D.jpg」,「image/30023/A.jpg」,「image/30024 /B.jpg「是一個同樣有效的結果? – Strawberry

回答

1

爲MySQL -

中號哈立德朱奈德的答案的偉大工程。

對於Sybase -

我做了一個瘦招..不知道如何有效的,這是 -

select source_uri from image 

問題:要提取 「圖像/ 30022」,從「圖像/ 30022/A.JPG」

解決方案:

1)得到的文件長度 - file_length = CHARINDEX('/', reverse(source_uri))

2)子串 - SUBSTRING(source_uri, 1, LEN(source_uri) - file_length)

select SUBSTRING(source_uri, 1, LEN(source_uri) - file_length) from image 
group by SUBSTRING(source_uri, 1, LEN(source_uri) - file_length) 
1

如果總是存在最後6個字符,則可以使用RIGHT(col,len)右返回字符串str中最右側的len個字符,如果任何參數爲NULL,則返回NULL

select source_uri 
from image 
GROUP BY RIGHT(source_uri ,6) 

RIGHT(str,len)

其他方式,你需要最後一次後,即可獲取部分/所以使用SUBSTRING_INDEX

select source_uri 
from image 
GROUP BY SUBSTRING_INDEX(source_uri ,'/',-1) 

SUBSTRING_INDEX(str,delim,count)

閱讀評論

SUBSTRING_INDEX(source_uri ,'/',-1) /* will give you A.jpg*/ 

現在,經過編輯,以獲得剩餘的部分,你可以這樣做

SUBSTRING_INDEX(source_uri ,SUBSTRING_INDEX(source_uri ,'/',-1) ,1) /* will give you image/30022/ */ 
+0

謝謝你的答案..但是沒有...文件名可以是不同的長度。 – webExplorer

+0

@webExplorer查看我的更新回答 –

+0

謝謝!這會打印出文件名 - A.jpg,B.jpg等等......不知道如何打破文件路徑,例如打印文件路徑。 「image/3022 /」 – webExplorer