我的列的值如下:
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
感谢阅读!
答案 0 :(得分:1)
简单,使用REPLACE功能。
替换' BOOK#,'通过' BOOK#'。
答案 1 :(得分: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在blog发布这个技巧。
答案 2 :(得分:0)
SELECT REPLACE (colname , (SUBSTR(colname ,1 ,LOCATE(',',colname)-1)) , (SUBSTR(colname ,1 ,LOCATE(",",colname)-1))|| ' ') from *sometable*