SQL-запрос к форматированию XML - PullRequest
0 голосов
/ 27 августа 2018

Я получаю информацию, которую хочу. Тем не менее, некоторые элементы имеют пробелы после данных, такие как элементы Имя и Фамилия. Я хотел бы удалить этот пробел. Любая помощь очень ценится.

Вот код, с которым я работаю. Он получает данные из базы данных db2 с помощью SQL-запроса.

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 голосов
/ 28 августа 2018

Как предлагается в комментариях, вам нужно будет удалить конечные пробелы из столбцов, где вы их не хотите, как показано в следующем фрагменте:

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

Если значения также имеют начальные пробелы, оберните их также в LTRIM() или используйте функцию TRIM(), если она доступна в вашей версии Db2 (вам нужно обратиться к руководству для конкретной версии, которая у вас есть).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...