【问题标题】:SQL/Sybase query group by a substring of a column valueSQL/Sybase 查询按列值的子字符串分组
【发布时间】:2014-01-05 17:45:12
【问题描述】:

我正在做一个简单的选择查询,结果如下 -

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

--

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

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

【问题讨论】:

  • 结果集有逻辑吗?
  • 逻辑是获取不同的文件夹名称 - "image/30022", "image/30023" ...
  • 那么“image/30022/D.jpg”、“image/30023/A.jpg”、“image/30024/B.jpg”是同样有效的结果吗?
  • 这是真的!目前对文件名不感兴趣。

标签: mysql sql sybase


【解决方案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)

阅读 cmets 后编辑

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/ */

【讨论】:

  • 感谢您的回答..但不...文件名可以有不同的长度。
  • 谢谢!这打印了文件名 - A.jpg、B.jpg 等等....除了文件名之外,不知道如何破冰打印文件路径。 “图像/3022/”
  • 另外,我需要在 Sybase DB 中使用相同的替代方法...更新问题。感谢您的回答。
  • @webExplorer 不熟悉 sybase 语法,但从 here 你可以从 docs 获得它
【解决方案2】:

对于 MySQL -

M Khalid Junaid 的回答效果很好。

用于 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)

【讨论】:

    猜你喜欢
    • 2016-05-18
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 2019-12-13
    相关资源
    最近更新 更多