1

我有一列的值如下:

BOOK # ,7,8
BOOK # ,2
BOOK # ,13,14

我正在使用复杂的 xml 聚合函数生成上面的列,如下所示:

SELECT 
CONCAT('BOOK # ',XMLSERIALIZE(XMLAGG(XMLTEXT(CONCAT(',', SUBSTR(TRIM(TEMP.BOOK_NUM),    
LOCATE('.',TEMP.BOOK_NUM)+1)))) AS VARCHAR(1024 )))
FROM TEMP 
GROUP BY BOOK_ID

Temp.book_num 的类型为 123.2、123.4,位于两个不同的行中。所以 book_id 123 将有两本书 2、4。因此要从两行相同的 book_id 中提取 2 和 4,我必须编写上面的查询。

很明显,在 'BOOK #' 之后有一个额外的 ',' 逗号,这是多余且不需要的。

我无法修改上述查询以将其删除。

有什么方法可以从上面的查询中可以容纳的列值中删除第一次出现的字符(这里是逗号)?

我的输出应该是:

BOOK # 7,8
BOOK # 2
BOOK # 13,14

谢谢阅读!

4

3 回答 3

1

很简单,使用REPLACE功能。

将“书#”替换为“书#”。

于 2012-05-21T12:11:30.147 回答
0

尽管措辞几乎相同,但删除第一个字符比删除第一次出现的特定字符要容易得多。幸运的是,只需删除第一个字符即可解决您的问题。您可以通过将XMLSERIALIZE()表达式填充到这样的SUBSTR()调用中来做到这一点:

CONCAT('BOOK # ',
    SUBSTR(
        XMLSERIALIZE(XMLAGG(XMLTEXT(CONCAT(',', SUBSTR(TRIM(TEMP.BOOK_NUM),  
           LOCATE('.',TEMP.BOOK_NUM)+1)))) AS VARCHAR(1024))
       ,2
    )
)

感谢 Serge Rielau 在他的博客中发布这个技巧。

于 2012-05-21T20:32:31.010 回答
0
SELECT REPLACE (colname , (SUBSTR(colname ,1 ,LOCATE(',',colname)-1)) , (SUBSTR(colname ,1 ,LOCATE(",",colname)-1))|| ' ') from *sometable*
于 2017-09-27T00:24:53.580 回答