<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: How to convert a number from any base to any base in SQL</title>
	<atom:link href="http://oraqa.com/2008/04/19/how-to-convert-number-from-any-base-to-any-other-bases-in-sql/feed/" rel="self" type="application/rss+xml" />
	<link>http://oraqa.com/2008/04/19/how-to-convert-number-from-any-base-to-any-other-bases-in-sql/</link>
	<description>Oracle Question and Answer</description>
	<lastBuildDate>Mon, 19 Dec 2011 14:21:07 -0700</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: newkid</title>
		<link>http://oraqa.com/2008/04/19/how-to-convert-number-from-any-base-to-any-other-bases-in-sql/comment-page-1/#comment-279</link>
		<dc:creator>newkid</dc:creator>
		<pubDate>Fri, 25 Jun 2010 14:37:59 +0000</pubDate>
		<guid isPermaLink="false">http://oraqa.com/?p=248#comment-279</guid>
		<description>&lt;pre&gt;
VAR STR VARCHAR2(10);
EXEC :STR := &#039;1234WXYZ&#039;;

VAR FROM_BASE NUMBER;
EXEC :FROM_BASE :=36;

VAR TO_BASE NUMBER;
EXEC :TO_BASE :=16;

WITH n1 AS (
  SELECT SUM((CASE WHEN c BETWEEN &#039;0&#039; AND &#039;9&#039; THEN TO_NUMBER(c) 
                   ELSE ASCII(c)-ASCII(&#039;A&#039;)+10 
              END)*POWER(:FROM_BASE,len-rn)    
             ) AS the_num     
    FROM (SELECT SUBSTR(:STR,ROWNUM,1) c  
                ,LENGTH(:STR) len         
                ,ROWNUM rn                
            FROM DUAL 
          CONNECT BY ROWNUM&lt;=LENGTH(:STR)
          )
)
,n2 AS (
  SELECT (CASE WHEN n &lt;10 THEN TO_CHAR(n) ELSE CHR(ASCII(&#039;A&#039;)+n-10) END) AS digi   
        ,rn
    FROM (SELECT MOD(TRUNC(the_num/POWER(:TO_BASE,ROWNUM -1)),:TO_BASE) n   
                ,ROWNUM rn        
            FROM n1
          CONNECT BY ROWNUM &lt;= TRUNC(LOG(:TO_BASE,the_num))+1  
         )
)
SELECT REPLACE(SYS_CONNECT_BY_PATH(digi,&#039;*&#039;),&#039;*&#039;) AS result  
  FROM n2
WHERE rn=1    
START WITH rn = (SELECT MAX(rn) FROM n2)  
CONNECT BY rn = PRIOR rn -1;



WITH n1(the_num,lvl,c) AS ( 
  SELECT 0,1,SUBSTR(:STR,1,1) FROM DUAL
  UNION ALL
  SELECT the_num*:FROM_BASE  
         +(CASE WHEN c BETWEEN &#039;0&#039; AND &#039;9&#039; THEN TO_NUMBER(c) 
                ELSE ASCII(c)-ASCII(&#039;A&#039;)+10 
           END)
        ,lvl+1
        ,SUBSTR(:STR,lvl+1,1)
    FROM n1
   WHERE lvl&lt;=LENGTH(:STR)
  )
,n2(the_num,n,result) AS ( 
  SELECT TRUNC(the_num/:TO_BASE),MOD(the_num,:TO_BASE),&#039;&#039; 
    FROM n1 
   WHERE lvl=LENGTH(:STR)+1
  UNION ALL
  SELECT (CASE WHEN the_num=0 THEN -1   
               ELSE TRUNC(the_num/:TO_BASE) 
          END)
        ,MOD(the_num,:TO_BASE)   
        ,(CASE WHEN n &lt;10 THEN TO_CHAR(n) ELSE CHR(ASCII(&#039;A&#039;)+n-10) END)&#124;&#124;result  
    FROM n2
   WHERE the_num&gt;=0
  )
SELECT result FROM n2 WHERE the_num&lt;0
;

&lt;/pre&gt;</description>
		<content:encoded><![CDATA[<pre>
VAR STR VARCHAR2(10);
EXEC :STR := '1234WXYZ';

VAR FROM_BASE NUMBER;
EXEC :FROM_BASE :=36;

VAR TO_BASE NUMBER;
EXEC :TO_BASE :=16;

WITH n1 AS (
  SELECT SUM((CASE WHEN c BETWEEN '0' AND '9' THEN TO_NUMBER(c)
                   ELSE ASCII(c)-ASCII('A')+10
              END)*POWER(:FROM_BASE,len-rn)
             ) AS the_num
    FROM (SELECT SUBSTR(:STR,ROWNUM,1) c
                ,LENGTH(:STR) len
                ,ROWNUM rn
            FROM DUAL
          CONNECT BY ROWNUM&lt;=LENGTH(:STR)
          )
)
,n2 AS (
  SELECT (CASE WHEN n &lt;10 THEN TO_CHAR(n) ELSE CHR(ASCII('A')+n-10) END) AS digi
        ,rn
    FROM (SELECT MOD(TRUNC(the_num/POWER(:TO_BASE,ROWNUM -1)),:TO_BASE) n
                ,ROWNUM rn
            FROM n1
          CONNECT BY ROWNUM &lt;= TRUNC(LOG(:TO_BASE,the_num))+1
         )
)
SELECT REPLACE(SYS_CONNECT_BY_PATH(digi,'*'),'*') AS result
  FROM n2
WHERE rn=1
START WITH rn = (SELECT MAX(rn) FROM n2)
CONNECT BY rn = PRIOR rn -1;

WITH n1(the_num,lvl,c) AS (
  SELECT 0,1,SUBSTR(:STR,1,1) FROM DUAL
  UNION ALL
  SELECT the_num*:FROM_BASE
         +(CASE WHEN c BETWEEN '0' AND '9' THEN TO_NUMBER(c)
                ELSE ASCII(c)-ASCII('A')+10
           END)
        ,lvl+1
        ,SUBSTR(:STR,lvl+1,1)
    FROM n1
   WHERE lvl&lt;=LENGTH(:STR)
  )
,n2(the_num,n,result) AS (
  SELECT TRUNC(the_num/:TO_BASE),MOD(the_num,:TO_BASE),''
    FROM n1
   WHERE lvl=LENGTH(:STR)+1
  UNION ALL
  SELECT (CASE WHEN the_num=0 THEN -1
               ELSE TRUNC(the_num/:TO_BASE)
          END)
        ,MOD(the_num,:TO_BASE)
        ,(CASE WHEN n &lt;10 THEN TO_CHAR(n) ELSE CHR(ASCII('A')+n-10) END)||result
    FROM n2
   WHERE the_num&gt;=0
  )
SELECT result FROM n2 WHERE the_num&lt;0
;
</pre>
]]></content:encoded>
	</item>
	<item>
		<title>By: newkid</title>
		<link>http://oraqa.com/2008/04/19/how-to-convert-number-from-any-base-to-any-other-bases-in-sql/comment-page-1/#comment-259</link>
		<dc:creator>newkid</dc:creator>
		<pubDate>Thu, 24 Jun 2010 17:45:21 +0000</pubDate>
		<guid isPermaLink="false">http://oraqa.com/?p=248#comment-259</guid>
		<description>&lt;pre&gt;
VAR STR VARCHAR2(10);
EXEC :STR := &#039;1234WXYZ&#039;;

VAR FROM_BASE NUMBER;
EXEC :FROM_BASE :=36;

VAR TO_BASE NUMBER;
EXEC :TO_BASE :=16;

          
WITH n1 AS (
  SELECT SUM((CASE WHEN c BETWEEN &#039;0&#039; AND &#039;9&#039; THEN TO_NUMBER(c) 
                   ELSE ASCII(c)-ASCII(&#039;A&#039;)+10 
              END)*POWER(:FROM_BASE,len-rn)    
             ) AS the_num     
    FROM (SELECT SUBSTR(:STR,ROWNUM,1) c  
                ,LENGTH(:STR) len         
                ,ROWNUM rn                
            FROM DUAL 
          CONNECT BY ROWNUM&lt;=LENGTH(:STR)
          )
)
,n2 AS (
  SELECT (CASE WHEN n &lt;10 THEN TO_CHAR(n) ELSE CHR(ASCII(&#039;A&#039;)+n-10) END) AS digi   
        ,rn
    FROM (SELECT MOD(TRUNC(the_num/POWER(:TO_BASE,ROWNUM -1)),:TO_BASE) n   
                ,ROWNUM rn        
            FROM n1
          CONNECT BY ROWNUM &lt;= TRUNC(LOG(:TO_BASE,the_num))+1  
         )
)
SELECT REPLACE(SYS_CONNECT_BY_PATH(digi,&#039;*&#039;),&#039;*&#039;) AS result  
  FROM n2
WHERE rn=1    
START WITH rn = (SELECT MAX(rn) FROM n2)  
CONNECT BY rn = PRIOR rn -1;


RESULT
------------
134DAA43FB


11GR2:
WITH n1(the_num,lvl,c) AS ( 
  SELECT 0,1,SUBSTR(:STR,1,1) FROM DUAL
  UNION ALL
  SELECT the_num*:FROM_BASE  
         +(CASE WHEN c BETWEEN &#039;0&#039; AND &#039;9&#039; THEN TO_NUMBER(c) 
                ELSE ASCII(c)-ASCII(&#039;A&#039;)+10 
           END)
        ,lvl+1
        ,SUBSTR(:STR,lvl+1,1)
    FROM n1
   WHERE lvl&lt;=LENGTH(:STR)
  )
,n2(the_num,n,result) AS ( 
  SELECT TRUNC(the_num/:TO_BASE),MOD(the_num,:TO_BASE),&#039;&#039; 
    FROM n1 
   WHERE lvl=LENGTH(:STR)+1
  UNION ALL
  SELECT (CASE WHEN the_num=0 THEN -1   
               ELSE TRUNC(the_num/:TO_BASE) 
          END)
        ,MOD(the_num,:TO_BASE)   
        ,(CASE WHEN n =0
  )
SELECT result FROM n2 WHERE the_num&lt;0
;

RESULT
----------------
134DAA43FB


&lt;/pre&gt;</description>
		<content:encoded><![CDATA[<pre>
VAR STR VARCHAR2(10);
EXEC :STR := '1234WXYZ';

VAR FROM_BASE NUMBER;
EXEC :FROM_BASE :=36;

VAR TO_BASE NUMBER;
EXEC :TO_BASE :=16;

WITH n1 AS (
  SELECT SUM((CASE WHEN c BETWEEN '0' AND '9' THEN TO_NUMBER(c)
                   ELSE ASCII(c)-ASCII('A')+10
              END)*POWER(:FROM_BASE,len-rn)
             ) AS the_num
    FROM (SELECT SUBSTR(:STR,ROWNUM,1) c
                ,LENGTH(:STR) len
                ,ROWNUM rn
            FROM DUAL
          CONNECT BY ROWNUM&lt;=LENGTH(:STR)
          )
)
,n2 AS (
  SELECT (CASE WHEN n &lt;10 THEN TO_CHAR(n) ELSE CHR(ASCII(&#039;A&#039;)+n-10) END) AS digi
        ,rn
    FROM (SELECT MOD(TRUNC(the_num/POWER(:TO_BASE,ROWNUM -1)),:TO_BASE) n
                ,ROWNUM rn
            FROM n1
          CONNECT BY ROWNUM &lt;= TRUNC(LOG(:TO_BASE,the_num))+1
         )
)
SELECT REPLACE(SYS_CONNECT_BY_PATH(digi,&#039;*&#039;),&#039;*&#039;) AS result
  FROM n2
WHERE rn=1
START WITH rn = (SELECT MAX(rn) FROM n2)
CONNECT BY rn = PRIOR rn -1;

RESULT
------------
134DAA43FB

11GR2:
WITH n1(the_num,lvl,c) AS (
  SELECT 0,1,SUBSTR(:STR,1,1) FROM DUAL
  UNION ALL
  SELECT the_num*:FROM_BASE
         +(CASE WHEN c BETWEEN &#039;0&#039; AND &#039;9&#039; THEN TO_NUMBER(c)
                ELSE ASCII(c)-ASCII(&#039;A&#039;)+10
           END)
        ,lvl+1
        ,SUBSTR(:STR,lvl+1,1)
    FROM n1
   WHERE lvl&lt;=LENGTH(:STR)
  )
,n2(the_num,n,result) AS (
  SELECT TRUNC(the_num/:TO_BASE),MOD(the_num,:TO_BASE),&#039;&#039;
    FROM n1
   WHERE lvl=LENGTH(:STR)+1
  UNION ALL
  SELECT (CASE WHEN the_num=0 THEN -1
               ELSE TRUNC(the_num/:TO_BASE)
          END)
        ,MOD(the_num,:TO_BASE)
        ,(CASE WHEN n =0
  )
SELECT result FROM n2 WHERE the_num&lt;0
;

RESULT
----------------
134DAA43FB
</pre>
]]></content:encoded>
	</item>
	<item>
		<title>By: newkid</title>
		<link>http://oraqa.com/2008/04/19/how-to-convert-number-from-any-base-to-any-other-bases-in-sql/comment-page-1/#comment-258</link>
		<dc:creator>newkid</dc:creator>
		<pubDate>Thu, 24 Jun 2010 17:44:18 +0000</pubDate>
		<guid isPermaLink="false">http://oraqa.com/?p=248#comment-258</guid>
		<description>&lt;pre&gt;
VAR STR VARCHAR2(10);
EXEC :STR := &#039;1234WXYZ&#039;;

VAR FROM_BASE NUMBER;
EXEC :FROM_BASE :=36;

VAR TO_BASE NUMBER;
EXEC :TO_BASE :=16;

          
WITH n1 AS (
  SELECT SUM((CASE WHEN c BETWEEN &#039;0&#039; AND &#039;9&#039; THEN TO_NUMBER(c) 
                   ELSE ASCII(c)-ASCII(&#039;A&#039;)+10 
              END)*POWER(:FROM_BASE,len-rn)    
             ) AS the_num     
    FROM (SELECT SUBSTR(:STR,ROWNUM,1) c  
                ,LENGTH(:STR) len         
                ,ROWNUM rn                
            FROM DUAL 
          CONNECT BY ROWNUM&lt;=LENGTH(:STR)
          )
)
,n2 AS (
  SELECT (CASE WHEN n &lt;10 THEN TO_CHAR(n) ELSE CHR(ASCII(&#039;A&#039;)+n-10) END) AS digi   
        ,rn
    FROM (SELECT MOD(TRUNC(the_num/POWER(:TO_BASE,ROWNUM -1)),:TO_BASE) n   
                ,ROWNUM rn        
            FROM n1
          CONNECT BY ROWNUM &lt;= TRUNC(LOG(:TO_BASE,the_num))+1  
         )
)
SELECT REPLACE(SYS_CONNECT_BY_PATH(digi,&#039;*&#039;),&#039;*&#039;) AS result  
  FROM n2
WHERE rn=1    
START WITH rn = (SELECT MAX(rn) FROM n2)  
CONNECT BY rn = PRIOR rn -1;


RESULT
------------
134DAA43FB


11GR2:
WITH n1(the_num,lvl,c) AS ( 
  SELECT 0,1,SUBSTR(:STR,1,1) FROM DUAL
  UNION ALL
  SELECT the_num*:FROM_BASE  
         +(CASE WHEN c BETWEEN &#039;0&#039; AND &#039;9&#039; THEN TO_NUMBER(c) 
                ELSE ASCII(c)-ASCII(&#039;A&#039;)+10 
           END)
        ,lvl+1
        ,SUBSTR(:STR,lvl+1,1)
    FROM n1
   WHERE lvl&lt;=LENGTH(:STR)
  )
,n2(the_num,n,result) AS ( 
  SELECT TRUNC(the_num/:TO_BASE),MOD(the_num,:TO_BASE),&#039;&#039; 
    FROM n1 
   WHERE lvl=LENGTH(:STR)+1
  UNION ALL
  SELECT (CASE WHEN the_num=0 THEN -1   
               ELSE TRUNC(the_num/:TO_BASE) 
          END)
        ,MOD(the_num,:TO_BASE)   
        ,(CASE WHEN n =0
  )
SELECT result FROM n2 WHERE the_num&lt;0
;

RESULT
----------------
134DAA43FB

&lt;/pre&gt;</description>
		<content:encoded><![CDATA[<pre>
VAR STR VARCHAR2(10);
EXEC :STR := '1234WXYZ';

VAR FROM_BASE NUMBER;
EXEC :FROM_BASE :=36;

VAR TO_BASE NUMBER;
EXEC :TO_BASE :=16;

WITH n1 AS (
  SELECT SUM((CASE WHEN c BETWEEN '0' AND '9' THEN TO_NUMBER(c)
                   ELSE ASCII(c)-ASCII('A')+10
              END)*POWER(:FROM_BASE,len-rn)
             ) AS the_num
    FROM (SELECT SUBSTR(:STR,ROWNUM,1) c
                ,LENGTH(:STR) len
                ,ROWNUM rn
            FROM DUAL
          CONNECT BY ROWNUM&lt;=LENGTH(:STR)
          )
)
,n2 AS (
  SELECT (CASE WHEN n &lt;10 THEN TO_CHAR(n) ELSE CHR(ASCII(&#039;A&#039;)+n-10) END) AS digi
        ,rn
    FROM (SELECT MOD(TRUNC(the_num/POWER(:TO_BASE,ROWNUM -1)),:TO_BASE) n
                ,ROWNUM rn
            FROM n1
          CONNECT BY ROWNUM &lt;= TRUNC(LOG(:TO_BASE,the_num))+1
         )
)
SELECT REPLACE(SYS_CONNECT_BY_PATH(digi,&#039;*&#039;),&#039;*&#039;) AS result
  FROM n2
WHERE rn=1
START WITH rn = (SELECT MAX(rn) FROM n2)
CONNECT BY rn = PRIOR rn -1;

RESULT
------------
134DAA43FB

11GR2:
WITH n1(the_num,lvl,c) AS (
  SELECT 0,1,SUBSTR(:STR,1,1) FROM DUAL
  UNION ALL
  SELECT the_num*:FROM_BASE
         +(CASE WHEN c BETWEEN &#039;0&#039; AND &#039;9&#039; THEN TO_NUMBER(c)
                ELSE ASCII(c)-ASCII(&#039;A&#039;)+10
           END)
        ,lvl+1
        ,SUBSTR(:STR,lvl+1,1)
    FROM n1
   WHERE lvl&lt;=LENGTH(:STR)
  )
,n2(the_num,n,result) AS (
  SELECT TRUNC(the_num/:TO_BASE),MOD(the_num,:TO_BASE),&#039;&#039;
    FROM n1
   WHERE lvl=LENGTH(:STR)+1
  UNION ALL
  SELECT (CASE WHEN the_num=0 THEN -1
               ELSE TRUNC(the_num/:TO_BASE)
          END)
        ,MOD(the_num,:TO_BASE)
        ,(CASE WHEN n =0
  )
SELECT result FROM n2 WHERE the_num&lt;0
;

RESULT
----------------
134DAA43FB
</pre>
]]></content:encoded>
	</item>
	<item>
		<title>By: DP1234</title>
		<link>http://oraqa.com/2008/04/19/how-to-convert-number-from-any-base-to-any-other-bases-in-sql/comment-page-1/#comment-250</link>
		<dc:creator>DP1234</dc:creator>
		<pubDate>Fri, 02 Apr 2010 20:42:07 +0000</pubDate>
		<guid isPermaLink="false">http://oraqa.com/?p=248#comment-250</guid>
		<description>Here is a nice elegant solution using plain SQL that was posted over on StackOverflow for converting bases:

http://stackoverflow.com/questions/2568668/base-36-to-base-10-conversion-using-sql-only</description>
		<content:encoded><![CDATA[<p>Here is a nice elegant solution using plain SQL that was posted over on StackOverflow for converting bases:</p>
<p><a href="http://stackoverflow.com/questions/2568668/base-36-to-base-10-conversion-using-sql-only" rel="nofollow">http://stackoverflow.com/questions/2568668/base-36-to-base-10-conversion-using-sql-only</a></p>
]]></content:encoded>
	</item>
</channel>
</rss>

