HEX2BIN2 user defined function
- Dieses Thema hat 0 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 17 Jahre, 2 Monaten von
Anonym.
-
AuthorPosts
-
19. Juli 2006 um 16:19 Uhr #2703
AnonymInaktivHallo zusammen,
ich habe hier mal einen ersten Wurf einer User Defined Function, die HEX-Werte in Decimal-Werte umrechnet. Immer wieder begegnet man CHAR-Feldern die als Datencontainer missbraucht werden und die umgesetzt werden müssen.
Habt ihr schon was besseres, flexibleres, kürzeres, schnelleres???
Jeder Verbesserungsvorschlag willkommen.
Wünsche:
soll mit mehr als 4 byte umgehen können (am besten flexible)
soll Fehlermeldung ausgeben, falls nicht HEX-Zeichen im Input
Input ==> Output
x’00000001′ ==> 1
x’0000000A‘ ==> 15
x’00000011′ ==> 16
x’11111111′ ==> 286331153 etc.SET CURRENT PATH = ‚DB‘ ;
SET CURRENT SQLID = ‚DB‘ ;DROP FUNCTION DB.HEX2DEC2 ;
DROP FUNCTION DB.HEX2DEC1 ;CREATE FUNCTION DB.HEX2DEC1
( BYTE1 CHAR(1)
)
RETURNS DEC(2)
CONTAINS SQL
NO EXTERNAL ACTION
RETURN
CASE
WHEN BYTE1 BETWEEN ‚0‘ AND ‚9‘
THEN DEC(BYTE1)
WHEN BYTE1 = ‚A‘ THEN 10
WHEN BYTE1 = ‚B‘ THEN 11
WHEN BYTE1 = ‚C‘ THEN 12
WHEN BYTE1 = ‚D‘ THEN 13
WHEN BYTE1 = ‚E‘ THEN 14
WHEN BYTE1 = ‚F‘ THEN 15
ELSE 0
END
;CREATE FUNCTION DB.HEX2DEC2
( INPUTSTRING CHAR(4)
)
RETURNS DEC(13)
CONTAINS SQL
NO EXTERNAL ACTION
RETURN
(
DB.HEX2DEC1(SUBSTR(HEX(INPUTSTRING), 8 , 1))
)
+
( DB.HEX2DEC1(SUBSTR(HEX(INPUTSTRING), 7 , 1))
* 16
)
+
( DB.HEX2DEC1(SUBSTR(HEX(INPUTSTRING), 6 , 1))
* 16 * 16
)
+
( DB.HEX2DEC1(SUBSTR(HEX(INPUTSTRING), 5 , 1))
* 16 * 16 * 16
)
+
( DB.HEX2DEC1(SUBSTR(HEX(INPUTSTRING), 4 , 1))
* 16 * 16 * 16 * 16
)
+
( DB.HEX2DEC1(SUBSTR(HEX(INPUTSTRING), 3 , 1))
* 16 * 16 * 16 * 16 * 16
)
+
( DB.HEX2DEC1(SUBSTR(HEX(INPUTSTRING), 2 , 1))
* 16 * 16 * 16 * 16 * 16 *16
)
+
( DB.HEX2DEC1(SUBSTR(HEX(INPUTSTRING), 1 , 1))
* 16 * 16 * 16 * 16 * 16 *16 * 16
)
;Testfall:
SELECT DB.HEX2DEC2(CAST( X’11111111′ AS CHAR(4)))
FROM SYSIBM.SYSDUMMY1 ;286331153,
-
AuthorPosts
You must be logged in to reply to this topic.