On 05-Aug-2015 12:22 -0600, Charles Wilt wrote:
On Wed, Aug 5, 2015 at 1:28 PM, CRPence wrote:

• cast(cast(test as char(6) ccsid 37)
as graphic(6) ccsid 13488 )

Doesn't seem that will actually work if the CCSID 65535 ​field actually
contains 16-bit characters...like x'004100530044​'

When I tried
hex(cast(cast(substr(test,1,6) as char(6) CCSID 37) as graphic (6)
ccsid 13488))

I saw:

Exactly. That is consistent with why the casting into the EBCDIC encoding from effective BINARY is /given a pass/ but casting into ASCII encoding is not, on the EBCDIC OS; the doubly-cast result /assumes/ the original data is EBCDIC, naturally. And exemplifies why the lack of a DMAP [direct mapping] scalar function that mimics the CAST scalar function is lamentable. Ideally one would be able to, instead of CAST from a properly-typed scalar, DMAP from some untyped data of a given length, such that the desired effect would be achieved with:

DMAP(substr(test, 1, 6) as graphic (3) ccsid 13488)

I did not locate my RPGLE source for the Raw2VG1K [RawToVarGraphicUCS2_1Kinput] UDF I offer in the following link, but the code was quite trivial:

How nice to have been able to have written the query shown in the above link, as the much more succinct request; eliminating innumerable UDFs written [often incorrectly and\or narrowly] to achieve the same but typically only when also embedded within an additional CAST:

dmap(substr(s, 1, 3) as char(3) ccsid 37) as c3
, dmap(substr(s, 4, 6) as graphic(3)) as u3
, dmap(substr(s, 10, 3) as dec(5, 0)) as p5
from raw

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2020 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].