我正在以下列方式使用java做一个很长的字符串转换。
Long longValue = 367L;
String str = Long.toString(longValue, 36).toUpperCase();
这让我回到了价值A7。如何在做oracle sql时实现这一点。
更新:
嗨,我已经分析了java代码是如何工作的,然后想在程序中实现相同的东西。
第一点是输入值。 LONG和Radix。在我的情况下,Radix是36.所以我将得到1..9A的值... Z0它只从这个集合中获取值。 第二点长值作为输入。我们必须将此值除以基数。如果商数再次超过36,我们需要划分。
对于eaxmple 367,那么我的转换值是10(商)7(余数),即A7。 3672转换值为102 0我需要再次为102做2 -6所以我的最终值将是2-6 0即2U0( - 意味着颠倒顺序)。
更新2:
使用oracle内置函数我们可以做到这一点。这是由我的朋友解决并给了我一个功能。我要感谢我的朋友。这将给我一个输出如下。
367然后我的转换值为10(商)7(余数)即* A * 7.(我根据我的要求对其进行了修改)。
FUNCTION ENCODE_STRING(BASE_STRING IN VARCHAR2,
FROM_BASE IN NUMBER,
TO_BASE IN NUMBER)
RETURN VARCHAR2
IS
V_ENCODED_STRING VARCHAR(100);
BEGIN
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(BASE_STRING, ROWNUM, 1) C, LENGTH(BASE_STRING) LEN, ROWNUM RN
FROM DUAL
CONNECT BY ROWNUM <= LENGTH(BASE_STRING))
),
N2 AS (
SELECT (CASE
WHEN N < 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 <= TRUNC(LOG(TO_BASE, THE_NUM)) + 1)
)
SELECT SYS_CONNECT_BY_PATH(DIGI, '*') INTO V_ENCODED_STRING
FROM N2
WHERE RN = 1
START WITH RN = (SELECT MAX(RN) FROM N2)
CONNECT BY RN = PRIOR RN - 1;
RETURN V_ENCODED_STRING;
答案 0 :(得分:0)
在PL / SQL(或Oracle SQL)中,您有一个名为TO_CHAR的函数。
http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions181.htm
答案 1 :(得分:-1)
在纯SQL中无法执行此操作。你必须使用PL / SQL。
简单的例子如何做到PL / SQL:
CREATE TABLE long_tbl
(
long_col LONG
);
INSERT INTO long_tbl VALUES('How to convert the Long value to String using sql');
DECLARE
l_varchar VARCHAR2(32767);
BEGIN
SELECT long_col
INTO l_varchar
FROM long_tbl;
DBMS_OUTPUT.PUT_LINE(l_varchar);
END;
-- How to convert the Long value to String using sql
有TO_LOB功能但只能在将数据插入表时使用。 http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions185.htm
您只能将此功能应用于LONG或LONG RAW列,以及 仅在INSERT语句中的子查询的选择列表中。
使用“dbms_sql.column_value_long”还有其他更合适的方法,但这很复杂(获取LONG列并附加到CLOB类型。)
http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_sql.htm#i1025399
(Oracle数据库PL / SQL包和类型参考)