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は、2つの異なる行のタイプ123.2、123.4です。したがって、book_id 123には2冊の本2、4があります。したがって、同じbook_idの2行から2と4を抽出するには、上記のクエリを作成する必要がありました。

明らかなように、「BOOK#」という単語の後に余分な「、」コンマがありますが、これは冗長で不要です。

上記のクエリを変更して削除することはできません。

上記のクエリに対応できる列の値から、最初に出現する文字(ここではコンマ)を削除する方法はありますか?

私の出力は次のようになります。

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

読んでくれてありがとう!

4

3 に答える 3

1

シンプルに、REPLACE関数を使用します。

「BOOK # ,」を「BOOK #」に置き換えます。

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

このトリックを彼のブログに投稿してくれたSergeRielauに感謝します。

于 2012-05-21T20:32:31.010 に答える