SQL / Sybase查询组由列值的子字符串组成

时间:2013-12-17 19:31:45

标签: mysql sql sybase

我正在使用以下结果进行简单的选择查询 -

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子句......但它没有分组,因为值不同。

-

我可以在mySQL中使用SUBSTRING_INDEX函数。

在Sybase中寻找确切的替代方案。

2 个答案:

答案 0 :(得分:1)

如果总有最后6个即 D.jpg“字符,则需要应用组,然后可以使用RIGHT(col,len),Right返回字符串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/ */

答案 1 :(得分:1)

FOR MySQL -

M Khalid Junaid的回答很有效。

FOR Sybase -

我做了一个精益技巧..不确定这是多么有效 -

select source_uri from image 

问题:从“image / 30022 / a.jpg”中提取“image / 30022”

解决方案:

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)