XMLSERIALIZE
XMLSERIALIZE
Via la requête ci-dessous je génère un fichier dans l'IFS.
SELECT
'<?xml version="1.0" encoding="UTF-8"?>' ||
xmlserialize(
xmlelement(name "info_1",
xmlelement (name "info_2" ,
xmlelement(name "detailinfo2_1" , '1234'),
xmlelement(name "deatilinfo2_2" , '12345678')
),
xmlelement(name "liste" ,
xmlagg(
xmlelement(
name "enetete",
xmlelement(name "detail_1" , BIBLIO.DATEISO(a.DATEW, '*dmy')),
xmlelement(name "detail_2" , b.VALEUR1),
xmlelement(name "detail_3" , b.VALEUR2)
)
)
)
) as VARCHAR(3000)
)
FROM BIB.FIC1 a
LEFT JOIN BIB.FIC2 b
ON a.DATEW = b.DATEW AND a.NUMERO = b.NUMERO
LEFT JOIN BIB.FIC3 c ON a.ZONE1 = c.ZONE1
WHERE
a.NUMERO BETWEEN 375 AND 400
AND a.DATTUE = 011018;
Résultat :
<?xml version="1.0" encoding="UTF-8"?>
<info_1>
<info_2>
<detailinfo2_1>1234</detailinfo2_1>
<deatilinfo2_2>12345678</deatilinfo2_2>
</info_2>
<liste>
<enetete>
<detail_1>2018-10-01</detail_1>
<detail_2>72.0</detail_2>
<detail_3>.0</detail_3>
</enetete>
<enetete>
<detail_1>2018-10-01</detail_1>
<detail_2>79.7</detail_2>
<detail_3>77.2</detail_3>
</enetete>
</liste>
</info_1>
Problème :
Je ne parviens pas à obtenir "0.0" en detail_3 lorsque ma valeur est égal à zéro. Que faire ?
SELECT
'<?xml version="1.0" encoding="UTF-8"?>' ||
xmlserialize(
xmlelement(name "info_1",
xmlelement (name "info_2" ,
xmlelement(name "detailinfo2_1" , '1234'),
xmlelement(name "deatilinfo2_2" , '12345678')
),
xmlelement(name "liste" ,
xmlagg(
xmlelement(
name "enetete",
xmlelement(name "detail_1" , BIBLIO.DATEISO(a.DATEW, '*dmy')),
xmlelement(name "detail_2" , b.VALEUR1),
xmlelement(name "detail_3" , b.VALEUR2)
)
)
)
) as VARCHAR(3000)
)
FROM BIB.FIC1 a
LEFT JOIN BIB.FIC2 b
ON a.DATEW = b.DATEW AND a.NUMERO = b.NUMERO
LEFT JOIN BIB.FIC3 c ON a.ZONE1 = c.ZONE1
WHERE
a.NUMERO BETWEEN 375 AND 400
AND a.DATTUE = 011018;
Résultat :
<?xml version="1.0" encoding="UTF-8"?>
<info_1>
<info_2>
<detailinfo2_1>1234</detailinfo2_1>
<deatilinfo2_2>12345678</deatilinfo2_2>
</info_2>
<liste>
<enetete>
<detail_1>2018-10-01</detail_1>
<detail_2>72.0</detail_2>
<detail_3>.0</detail_3>
</enetete>
<enetete>
<detail_1>2018-10-01</detail_1>
<detail_2>79.7</detail_2>
<detail_3>77.2</detail_3>
</enetete>
</liste>
</info_1>
Problème :
Je ne parviens pas à obtenir "0.0" en detail_3 lorsque ma valeur est égal à zéro. Que faire ?
-
- Site Admin
- Messages : 813
- Enregistré le : mer. 14 févr. 2007, 18:00:03
- Localisation : Nantes
- Contact :
VARCHAR_FORMAT
Super, merci !
pour être précis :
VARCHAR_FORMAT(xxx, '0.00') produit un résultat avec le . comme marque décimale (la virgule est considérée comme le séparateur de millier)
VARCHAR_FORMAT(xxx, '0D00') produit un résultat avec comme marque décimale le séparateur de la langue en cours (en France "," )
https://www.ibm.com/support/knowledgece ... format.htm
pour être précis :
VARCHAR_FORMAT(xxx, '0.00') produit un résultat avec le . comme marque décimale (la virgule est considérée comme le séparateur de millier)
VARCHAR_FORMAT(xxx, '0D00') produit un résultat avec comme marque décimale le séparateur de la langue en cours (en France "," )
https://www.ibm.com/support/knowledgece ... format.htm
Christian Massé (Volubis.fr)
Effectivement le format doit à gauche définir autant de chiffres que nécessaire au formatage de la valeur passée, par contre à droite il y a un arrondi au nombre de chiffre indiqués
Donc pour formater un DECIMAL(11, 2) il faudrait passer:
ltrim(VARCHAR_FORMAT(-123456789.016, '999G999G990D00'))
ce qui donne -123.456.789,02
ltrim(VARCHAR_FORMAT(-123456789.016, '999999990D00'))
ce qui donne -123456789,02
(ltrim parce que les 9 sont remplacés par des blancs)
Donc pour formater un DECIMAL(11, 2) il faudrait passer:
ltrim(VARCHAR_FORMAT(-123456789.016, '999G999G990D00'))
ce qui donne -123.456.789,02
ltrim(VARCHAR_FORMAT(-123456789.016, '999999990D00'))
ce qui donne -123456789,02
(ltrim parce que les 9 sont remplacés par des blancs)
Nicolas
AFFAIRE RESOLUE
Merci à Tous.