首页 > 数据库 >[20240516]建立任意进制转10进制脚本xto10.sql脚本.txt

[20240516]建立任意进制转10进制脚本xto10.sql脚本.txt

时间:2024-05-18 21:52:06浏览次数:23  
标签:脚本 10 进制 ------------------------------ BASE10 xto10 && test01p

[20240516]建立任意进制转10进制脚本xto10.sql脚本.txt

--//bash shell 64进制编码从0开始. 0-9 , a-z , A-Z.这样仅仅62个编码.还剩下2个.@_
--//这样完整的编码如下:
$ base64=$(echo {0..9} {a..z} {A..Z} @ _)
$ echo $base64
0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z @ _

--//定义成bash数组如下:
$ BASE64=($(echo {0..9} {a..z} {A..Z} @ _))
$ echo ${BASE64[*]}
0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z @ _

--//0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@_
--//实际上最大64进制.代码来自Franck Pachot ,我修改一下支持最大64进制,原始链接已经找不到了.
$ cat 10tox.sql
set term off
column 2 new_value 2
select null "2" from dual where 1=2;
select nvl('&2',16) "2" from dual;
set term on

column base10 format a30
column base&&2 format a30

select to_char('&&1') base10,
    listagg(
        substr(
          case &&2 when 32 then
            '0123456789abcdfghjkmnpqrstuvwxyz'
          else
            '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@_'
          end,
          mod(
            trunc(&&1/power(&&2,level-1)),
            &&2
          ) + 1 ,
          1
        )
    ) within group (order by level desc) base&&2
  from dual
  connect by level <= ceil(log(&&2,&&1+1))
;

--//耐心阅读,很容易反向实现任意进制转10进制脚本xto10.sql脚本,

$ cat xto10.sql
set term off
column 2 new_value 2
select null "2" from dual where 1=2;
select nvl('&2',16) "2" from dual;
set term on

column base10 format  a30
column base&&2 format a30

SELECT '&&1' base&2, TO_CHAR (SUM (n * POWER (&2, p))) base10
  FROM (    SELECT   INSTR
                     (
                        CASE &&2
                           WHEN 32
                           THEN
                              '0123456789abcdfghjkmnpqrstuvwxyz'
                           WHEN 16
                           THEN
                              '0123456789abcdef'
                           ELSE
                              '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@_'
                        END
                       ,SUBSTR
                        (
                           CASE &2 WHEN 16 THEN LOWER ('&&1') ELSE '&&1' END
                          ,LEVEL
                          ,1
                        )
                     )
                   - 1
                      N
                  ,LENGTH ('&&1') - LEVEL P
                  ,SUBSTR ('&&1', LEVEL, 1) C
              FROM DUAL
        CONNECT BY LEVEL <= LENGTH ('&&1'));
--//16进制特殊一些,考虑英文字符大小写问题.

$ echo $((62#A92))
138944

SCOTT@test01p> @ xto10 A92 62
BASE62                         BASE10
------------------------------ ------------------------------
A92                            138944

SCOTT@test01p> @ xto10 1f 16
BASE16                         BASE10
------------------------------ ------------------------------
1f                             31

SCOTT@test01p> @ undefparm
SCOTT@test01p> define 2
SP2-0135: symbol 2 is UNDEFINED
SCOTT@test01p> @ xto10 1F
BASE16                         BASE10
------------------------------ ------------------------------
1F                             31
--//支持大小写混合输入.

$ echo $((64#_@1))
262017

SCOTT@test01p> @ xto10 _@1 64
BASE64                         BASE10
------------------------------ ------------------------------
_@1                            262017

SCOTT@test01p> @ xto10 210 10
BASE10                         BASE10
------------------------------ ------------------------------
210                            210
--//看看sql_id的计算.
SCOTT@test01p> select * from dept;
    DEPTNO DNAME                LOC
---------- -------------------- -------------
        10 ACCOUNTING           NEW YORK
        20 RESEARCH             DALLAS
        30 SALES                CHICAGO
        40 OPERATIONS           BOSTON

SCOTT@test01p> @ hash
HASH_VALUE SQL_ID        CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX   SQL_EXEC_START      SQL_EXEC_ID
---------- ------------- ------------ ---------- --------------- ---------- ------------------- -----------
3599690174 3154rqzb8xudy            0      59838      3383998547  d68ee9be  2024-05-15 21:33:53    16777217

SCOTT@test01p> select * from v$db_object_cache where name='select * from dept' and rownum=1
  2  @ prxx
==============================
OWNER                         :
NAME                          : select * from dept
DB_LINK                       :
NAMESPACE                     : SQL AREA
TYPE                          : CURSOR
SHARABLE_MEM                  : 16176
LOADS                         : 1
EXECUTIONS                    : 1
LOCKS                         : 0
PINS                          : 0
KEPT                          : NO
CHILD_LATCH                   : 0
INVALIDATIONS                 : 0
HASH_VALUE                    : 3599690174
LOCK_MODE                     : NONE
PIN_MODE                      : NONE
STATUS                        : VALID
TIMESTAMP                     : 2024-05-15/21:31:36
PREVIOUS_TIMESTAMP            :
LOCKED_TOTAL                  : 1
PINNED_TOTAL                  : 2
PROPERTY                      :
FULL_HASH_VALUE               : 124fbd0eb1f2b39a309497b7d68ee9be
CON_ID                        : 3
CON_NAME                      :
ADDR                          : 000007FF15B216D0
EDITION                       :
PL/SQL procedure successfully completed.

--//取FULL_HASH_VALUE后16个字符.
SYS@test> @ hex 309497b7d68ee9be
                                DEC                  HEX
----------------------------------- --------------------
         3500589626208217534.000000     309497B7D68EE9BE

SYS@test> @ 10tox  3500589626208217534 32
               BASE10 BASE32
--------------------- ------------------------------
  3500589626208217534 3154rqzb8xudy
--//sql_id=3154rqzb8xudy.

SCOTT@test01p> @xto10 309497b7d68ee9be 16
BASE16                         BASE10
------------------------------ ------------------------------
309497b7d68ee9be               3500589626208217534

SCOTT@test01p> @ xto10 3154rqzb8xudy 32
BASE32                         BASE10
------------------------------ ------------------------------
3154rqzb8xudy                  3500589626208217534

标签:脚本,10,进制,------------------------------,BASE10,xto10,&&,test01p
From: https://www.cnblogs.com/lfree/p/18199818

相关文章

  • [20240518]任意进制转换xtoy.sql脚本.txt
    [20240518]任意进制转换xtoy.sql脚本.txt--//前几天尝试改进10进制转任意进制,以及其他进制转10进制脚本,有了这两个脚本就可以通过10进制实现任意进制的转换.$cat10tox.sqlsettermoffcolumn2new_value2selectnull"2"fromdualwhere1=2;selectnvl('&2',16)"2"from......
  • [20240510]SQL语句存在问题与共享池内存分配.txt
    [20240510]SQL语句存在问题与共享池内存分配.txt--//五一前遇到的问题,生产系统应用程序升级,但是3个表忘记建立,而编写的程序可能存在问题,导致频繁调用这些根本不可能执行的sql--//语句.很奇怪的是应用前台根本不报错,真不知道开发如何写代码,难道没做例外处理以及记录吗?--//测......
  • [20240511]建立10进制转任意进制10tox.sql脚本.txt
    [20240511]建立10进制转任意进制10tox.sql脚本.txt--//翻开以前笔记,找到1个脚本10x.sql(改名10tox.sql),可以实现10进制转任意进制.受字符集限制最大64进制.--//bashshell64进制编码从0开始.0-9,a-z,A-Z.这样仅仅62个编码.还剩下2个.@_,以该编码为基础来实现--//bashshel......
  • [20250511]建立完善s2h.sql脚本.txt
    [20250511]建立完善s2h.sql脚本.txt--//写过一个sql_id计算hash_value的bashshell脚本,实际上oracle使用dbms_utility.SQLID_TO_SQLHASH就可以实现,$cats2h.sql--Copyright2023lfree.Allrightsreserved.--LicensedundertheApacheLicense,Version2.0.SeeLICENSE......
  • [20240512]建立完善sql_idz.sh脚本.txt
    [20240512]建立完善sql_idz.sh脚本.txt--//使用该脚本计算存在小问题,cat文件中如果有ascii=0,cat时会过滤掉,一般tablenamespac是1.--//在尾部追加\01\0\0\0,而sql语句追加的是\0.我以前代码写死的.修改更加灵活一些.--//增加参数3,如果不输入缺省等于\0.--//增加计算exact_mat......
  • VUE速通(10)Vue3核心语法(2)setup
    1setup概述setup是Vue3中一个新的配置项,值是一个函数,它是CompositionAPI“表演的舞台”,组件中所用到的:数据、方法、计算属性、监视......等等,均配置在setup中。特点如下:setup函数返回的对象中的内容,可直接在模板中使用。setup中访问this是undefined。setup函数会......
  • LG10384
    一道相当不错的概率题。首先考虑种子中存在\(\verb!aa!\)的情况。显然,我们可以让每个不是\(\verb!aa!\)的种子都与这个\(\verb!aa!\)型的种子杂交,并检验杂交后的性状。若为\(\verb!a!\),则一定为\(\verb!Aa!\),否则可能是\(\verb!AA!\)或\(\verb!Aa!\)。不难想到多杂交......
  • LG10374
    提供一种树状数组的做法。对于每个操作,我们考虑求出它执行的次数。题目保证了对于操作\(2\)所执行的操作编号都比其自身编号小,换句话说,即每个操作的执行次数是由编号比它大的操作决定的。有了这个性质后,不难发现可以倒着扫一遍每个操作。对于当前操作\(i\),可以通过前面的处理......
  • LG10444
    首先有一个显然的结论,即若可以分成超过\(2\)个序列,则一定可以分成\(2\)个序列。如样例中的第二组数据,可以直接分成\(\{1,1,1,9\}\)和\(\{8,0\}\)。严谨证明留给读者思考。有了上面这个结论后,就转化为判断是否能够分成两个序列。注意到极差只与最大值与最小值有关,因此全局......
  • LG10270
    思路十分简单,但需要一定的转化,好题。记\(s_{i,j}\)表示第\(i\)行的第\(j\)个字符。考虑任意一点\((i,j)\),假设在此之前没有经过字母不同的路径,若\(s_{i,j+1}\)和\(s_{i+1,j}\)不同,则可以分别往这两个方向走,最长公共前缀也就固定下来了,长度为\(i+j-1\)。于是我们就可......