SQL查询到XML格式

时间:2018-08-27 18:43:32

标签: sql xml db2

我收到我想要的信息。但是,某些元素在数据之后有空白,例如名字和姓氏元素。我想删除此空白。非常感谢您的帮助。

这是我正在使用的代码。它使用sql查询从db2数据库中提取数据。

SELECT CASE
    WHEN DSRV_APPL_ID = 'APP1' THEN 'Region1'
    WHEN DSRV_APPL_ID = 'APP2' THEN 'Region2'
    WHEN DSRV_APPL_ID = 'APP3' THEN 'Region3'
    WHEN DSRV_APPL_ID = 'App4' THEN 'Region4'
    WHEN DSRV_APPL_ID = 'App5' THEN 'Region5'
    WHEN DSRV_APPL_ID = 'APP6' THEN 'Region6'
    WHEN DSRV_APPL_ID = 'APP7' THEN 'Traveling'
    ELSE NULL
END AS "Group"
,XMLSERIALIZE (
    CONTENT XMLELEMENT(
        NAME "Users",
        XMLAGG(
            XMLELEMENT(
                NAME "User",
                    XMLELEMENT (NAME "USERID", DSRQ_SUBJ_USERID),
                    XMLELEMENT (NAME "FIRST", DSAC_INDIV_FIRST),
                    XMLELEMENT (NAME "LAST", DSAC_INDIV_LAST),
                    XMLELEMENT (NAME "DSQ",  DSRQ_DSR_NUMBER),
                    XMLELEMENT (NAME "SEQ", DSRQ_SEQ_NUMBER),
                    XMLELEMENT (NAME "REQUESTOR", DSRQ_REQUESTOR_ID),
                    XMLELEMENT (NAME "STATUS", DSRQ_CURR_STATUS),
            )
            ORDER BY DSRV_APPL_ID
        )
    )
    AS CLOB (30K)
) AS "USERLIST"

FROM DB2PROD.REQUEST
    ,DB2PROD.SECUREAPRV
    ,DB2PROD.ACCESSTABLE

WHERE (DSRQ_STATUS_DATE > CURRENT DATE - 2 DAYS or
        DSRQ_OPEN_DATE > CURRENT DATE - 2 DAYS or
        DSRQ_CLOSED_DATE > CURRENT DATE - 2 DAYS)
    AND DSRQ_TYPE = 'A'
    AND DSRQ_SUB_TYPE IN ('A','C')
    AND DSRV_ADD_DELETE = 'A'
    AND DSRQ_SUBJ_USERID <> '        '
    AND DSRQ_CURR_STATUS IN ('OPEN')
    AND DSAC_EMPLOYEE_FLAG = 'Y'

    AND DSAC_INDIV_NAME <> ''
    AND DSRQ_DSR_NUMBER = DSAC_DSR_NUMBER
    AND DSRQ_SEQ_NUMBER = DSAC_SEQ_NUMBER

    AND DSRQ_DSR_NUMBER = DSRV_DSR_NUMBER
    AND DSRQ_SEQ_NUMBER = DSRV_SEQ_NUMBER
    AND (DSRV_APPL_ID LIKE 'APP%')

GROUP BY DSRV_APPL_ID;

With UR

数据应以以下格式作为xml输出:

<Users>
    <USER>
        <UserID>ID1</UserID>
        <First>FirstName</First>
        <Last>LastName</Last>
        <DSQ>Ticket</DSQ>
        <SEQ>Sequence</SEQ>
        <REQUESTOR>Requestor ID</REQUESTOR>
        <STATUS>Current Status</STATUS>
    </USER>
    <USER>
        <UserID>ID2</UserID>
        <First>FirstName</First>
        <Last>LastName</Last>
        <DSQ>Ticket</DSQ>
        <SEQ>Sequence</SEQ>
        <REQUESTOR>Requestor ID</REQUESTOR>
        <STATUS>Current Status</STATUS>
    </USER>
<Users>

相反,数据看起来像这样:

<Users>
    <USER>
        <UserID>ID1</UserID>
        <First>FirstName                    </First>
        <Last>LastName                 </Last>
        <DSQ>Ticket</DSQ>
        <SEQ>Sequence</SEQ>
        <REQUESTOR>Requestor ID</REQUESTOR>
        <STATUS>Current Status</STATUS>
    </USER>
    <USER>
        <UserID>ID2</UserID>
        <First>FirstName               </First>
        <Last>LastName                 </Last>
        <DSQ>Ticket</DSQ>
        <SEQ>Sequence</SEQ>
        <REQUESTOR>Requestor ID</REQUESTOR>
        <STATUS>Current Status</STATUS>
    </USER>
<Users>

1 个答案:

答案 0 :(得分:1)

如评论中所建议,您需要从不需要的列中删除尾随空格,如以下片段所示:

                XMLELEMENT (NAME "FIRST", RTRIM(DSAC_INDIV_FIRST)),
                XMLELEMENT (NAME "LAST", RTRIM(DSAC_INDIV_LAST)),

如果值也有前导空格,请将其也包装在LTRIM()中,或者如果您的Db2版本中可用,请使用TRIM()函数(有关以下内容,请查阅手册)您所拥有的特定版本。