`
yupengcc
  • 浏览: 138835 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

oracle 全角、半角转换,和oracle 的 DUMP函数

阅读更多
to_single_byte(c)转换成半角
to_multi_byte(c)转换成全角


dump查看
SELECT '12345',
        DUMP('12345'),
        TO_SINGLE_BYTE('12345'),
        DUMP(TO_SINGLE_BYTE('12345'))
FROM dual;



DUMP函数返回一个Varchar2的值,该值格式如下
Type=××× Len=×××: ×××(,×××)*

Type可以参阅Data Types
Len 字节数
参数说明:
return_fmt
8  返回8进制结果
10 返回10进制结果
16返回16进制结果
17以每个字节作为单个字符返回,当且仅当它可以被解释为编译器的字符集中的可打印字符-------通常是ASCII or EBCDIC。

start_position and length
确定要返回的内部表示形式的哪个部分。
expr 为 null,则此函数返回 NULL。
该函数不支持CLOB直接作为参数。但是,可以作为通过隐式数据转换参数中传递 CLOB值。

例子如下:
SQL> select dump(1,16) from dual;
DUMP(1,16)
-----------------
Typ=2 Len=2: c1,2

SQL> select dump(1,10) from dual;
DUMP(1,10)
------------------
Typ=2 Len=2: 193,2

SQL> select dump('火狐',16) from dual;
DUMP('火狐',16)
-------------------------
Typ=96 Len=4: bb,f0,ba,fc

SQL> select dump('US',16) from dual;
DUMP('US',16)
-------------------
Typ=96 Len=2: 55,53

SQL> select dump('US',17) from dual;
DUMP('US',17)
-----------------
Typ=96 Len=2: U,S

SQL> select dump('火狐',17) from dual;
DUMP('火狐',17)
-------------------------
Typ=96 Len=4: bb,f0,ba,fc

SQL> select dump(1,17) from dual;
DUMP(1,17)
------------------
Typ=2 Len=2: c1,^B

SQL> select dump('火狐',17,1,1) from dual;
DUMP('火狐',17,1
----------------
Typ=96 Len=4: bb

SQL> select dump('火狐',17,1,2) from dual;
DUMP('火狐',17,1,2)
-------------------
Typ=96 Len=4: bb,f0


其次,了解一下Number类型数据在DUMP是如何处理的。
Number型数据经DUMP函数处理以后,输出格式如下:
Type=2 Len=×××:符号/指数位,  [数字1,数字2,数字3,. . . ,数字20]
Type=2 :表示Number类型
注意:如果是负数,且总长度小于21个字节,最后加一个102(是为了排序的需要)


DUMP(number,10)是以指数的方式处理的
正数: 符号/指数位 > 128
         计算公式:
                   指数=符号/指数位(第一字节)-193, 设 N为指数
                   数值1 = (数字1-1)*100^(N-0)
                   数值2 = (数字2-1)*100^(N-1)
                   .
                   .
.
数值20 = (数字20-1)*100^(N-19)
-------------------------------------------------------------
     Number数值  sum(数值1,数值2,数值3,. . . , 数值20)

负数:符号/指数位 < 128
指数=62-符号/指数位(第一字节),设 N为指数
                   数值1 = (101-数字1)*100^(N-0)
                   数值2 = (101-数字2)*100^(N-1)
                   .
                   .
.
数值20 = (101-数字20)*100^(N-19)
-------------------------------------------------------------
     Number数值  sum(数值1,数值2,数值3,. . . , 数值20)

0是区分正数和负数的分割点,0既不属于正数也不属于负数

0的以10进制方式DUMP出来的信息如下:
SQL> select dump(0) from dual;
DUMP(0)
----------------
Typ=2 Len=1: 128
根据上面的信息,我们可以计算得到16进制的DUMP信息应该是0X80,转换成二进制为1000 0000,正好是是一个字节编码最大值的一半。

以根据上面正数和负数的公式,我们计算以下数值的10和16进制的DUMP信息:
1)、150   2)、34.33   3)、-140  4)、 -333.99

第1)解题步骤:
150=100+50=100^1+ 50 ,

故根据上述,应该可以初步确认,150 DUMP函数输出格式:
Type=2 Len=3: 符号/指数位(第一字节),数字1,数字2

指数=符号/指数位(第一字节)-193 ,符号/指数位(第一字节)=194
100 ^1=(数字1-1)*100^(1-0)=(数字1-1)*100
数字1-1=1   ===>  数字1 = 2

50=(数字2-1)*100^(1-1)= (数字2-1)*1
数字2-1=50  ===>  数字2 = 51

150的DUMP函数10进制输出为: Type=2 Len=3: 194, 2, 51
根据上面,10进制194, 2, 51转换为16进制,则DUMP函数16进制为:
Type=2 Len=3: C2, 2, 33

Oracle SQL确认:
SQL> select dump(150) from dual;
DUMP(150)
---------------------
Typ=2 Len=3: 194,2,51

SQL> select dump(150,16) from dual;
DUMP(150,16)
--------------------
Typ=2 Len=3: c2,2,33

SQL>

第2)解题步骤:
33.33=33+0.33= (数字1-1)*100^(N-0)+ (数字2-1)*100^(N-1)
可以初步确认,33.33 DUMP函数输出格式:
Type=2 Len=3: 符号/指数位(第一字节),数字1,数字2

33 < 100   ===>  33 < 100^1    ===>  N = 0
符号/指数位(第一字节)= 193
    (数字1-1)*100^0=33   ===>  数字1=34
         (数字2-1)*100^(0-1)=0.33   ===>  数字2-1 = 33   ===>   数字2=34
33.33的DUMP函数10进制输出为: Type=2 Len=3: 193, 34, 34
                   16进制输出格式:Type=2 Len=3: C1, 22, 22

                   Oracle SQL确认:
         SQL> select dump(33.33,16) from dual;
DUMP(33.33,16)
---------------------
Typ=2 Len=3: c1,22,22

SQL> select dump(33.33) from dual;

DUMP(33.33)
----------------------
Typ=2 Len=3: 193,34,34
       
         第3题忽略不做……
       
第4)解题步骤:
         -333.99=-(300+33+0.99)=-(3*100^1+33+0.99)
         是负数
可以初步确认,-333.99 DUMP函数输出格式:
Type=2 Len=5: 符号/指数位(第一字节),数字1,数字2,数字3 , 120

         指数=62-符号/指数位(第一字节), 数字1上的指数是1 ,N=1
         故 1=62-符号/指数位(第一字节)  ===>  符号/指数位(第一字节)=61

         3*100^1 = (101-数字1)*100^(N-0)= (101-数字1)*100^1  ===>  3 = (101-数字1)
         数字1=98
    33=(101-数字2)*100^(1-1)  ===>  33= (101-数字2)
         数字2=68
         0.99==(101-数字3)*100^(1-2)  ===>  0.99= (101-数字3)*100^-1
    数字3 = 2
-333.99的DUMP函数10进制输出为: Type=2 Len=5: 61, 98, 68, 2,102
         16进制输出格式:Type=2 Len=5: 3D, 62, 44,2,66

Oracle SQL确认:
SQL> select dump(-333.99) from dual;
DUMP(-333.99)
---------------------------
Typ=2 Len=5: 61,98,68,2,102

SQL> select dump(-333.99,16) from dual;
DUMP(-333.99,16)
--------------------------
Typ=2 Len=5: 3d,62,44,2,66
分享到:
评论

相关推荐

    日文全角半角转化

    "日文全角半角转化" 日文全角半角转换是指将日文中的全角字符转换为半角字符或将半角...在 Java 中,我们可以使用多种方法来实现日文全角半角转换,包括使用 Unicode 代码点、Java 字符串处理函数和 third-party 库。

    全角半角转换函数.txt

    从提供的代码片段来看,它展示了两种用于全角和半角字符之间转换的函数实现:`ToSBC` 和 `ToDBC`。下面将详细介绍这两个函数的工作原理及其应用场景: ### ToSBC 函数:全角转半角 该函数接收一个字符串参数 `...

    字符串的全角半角转换 java

    在Java编程中,字符串的全角半角转换是一项常见的需求,尤其在处理用户输入或文本显示时。全角字符和半角字符的区别在于他们的宽度和编码方式。全角字符(全宽度字符)通常用于东亚语言,如中文、日文、韩文等,每个...

    C++全角半角字符转换

    C++全角半角字符转换

    全角半角转换,c++

    接着,通过循环遍历原字符串,调用`judgeWnum`和`judgeWchar`函数对每个字符进行判断和转换。 #### `judgeWnum`函数 这个函数用于判断并转换全角的数字和英文字符。如果字符位于全角的数字或字母编码范围内(例如...

    java 全角半角转换

    java 全角半角转换 对角对全角的转换

    postgres全角转半角函数.txt

    对postgresql数据库中不规则的数据批量处理查询,有些是全角的,需要转换查询,匹配,可以使用这个方法postgres全角转半角函数.txt

    全角半角 转换器

    全角 半角 转换器 C C++ 无需安装 小巧易用

    全角半角转换工具,编程后发现问题时可以对大把的程序改变,不必再一个一个手动修改,很方便!

    全角半角转换工具在IT行业中是一个非常实用的小型软件,尤其对于程序员和文本编辑者来说,它大大提升了工作效率。全角和半角字符在计算机处理文本时具有不同的表示方式和占用空间,理解它们的区别是理解和使用这类...

    C# 半角全角字符转换函数

    例如,在制作电子表格、编辑器或者网页布局时,可能需要确保所有字符都以相同宽度显示,这时就需要进行半角和全角字符的转换。 需要注意的是,这两个函数只处理了ASCII字符和全角中文字符之间的转换,对于其他语言...

    Flex 日语全角半角转换

    通常,这样的代码示例会包含一个或多个函数,用于将输入的字符串在全角和半角之间转换,并可能有测试用例来验证转换的正确性。 总的来说,Flex中的日语全角半角转换是一个涉及到字符串处理、Unicode编码和字符转换...

    解决.NET2.0全角半角转换麻烦的补丁

    .NET Framework 2.0虽然提供了丰富的字符串操作方法,但在全角半角转换方面并没有专门的内置函数。因此,开发者需要自定义解决方案来完成这个任务。标题中的"补丁"可能是指一个自定义的C#类或者方法,用于解决这个...

    java全角半角转换程序

    给定的Java代码片段展示了两种主要功能:将半角字符转换为全角字符(`SBCchange`方法)以及将全角字符转换为半角字符(`BQchange`和`QBchange`方法)。下面我们将对这些方法进行深入解析。 ##### SBCchange - 半角...

    全角半角数字转换工具v1.0713中文绿色免费版

    全角半角转换工具是一款可以批量将全角转换成半角,或批量将半角转换为全角的软件。全角半角转换工具支持文件导入、导出。 使用方法 1.将带有全角数字的新闻(Ctrl C)复制,在(Ctrl V)粘贴到上面文本框内。 2....

    C#实现字符串全角半角转换类

    接下来,我们来构建一个名为`CharConverter`的C#类,该类包含两个静态方法:`ToFullWidth`和`ToHalfWidth`,分别用于执行全角到半角和半角到全角的转换。 ```csharp public static class CharConverter { public ...

    全角半角转换

    全角和半角转换的基本原理是:全角字符的Unicode编码范围通常在0x3000到0x30FF之间,而半角字符则是0x0020到0x007E。转换过程就是将全角字符减去0x652F(即32767,全角空格的Unicode值与半角空格的ASCII值之差)或将...

    字符串,标点符号全角半角转换

    在示例代码中,`ToSBC` 和 `ToDBC` 方法分别实现了从半角到全角以及从全角到半角的转换。使用了`string.ToCharArray()`方法将字符串转换为字符数组,便于遍历和修改每个字符。通过循环和条件判断,实现了精确的字符...

    全角半角数字转换

    在提供的压缩包文件"SBCtoDBC"中,我们可以推测它包含了一个用于进行全角到半角(SBC,Single Byte Character,通常指半角)和半角到全角(DBC,Double Byte Character,通常指全角)转换的程序代码。这个程序可能...

    PB中全角与半角互转函数

    它接受两个参数:待转换的字符串`strInfo`和一个标志位`iFlag`,用来指定转换的方向(全角转半角或半角转全角)。函数返回转换后的字符串。 #### 参数说明 - **strInfo**:需要进行转换的字符串。 - **iFlag**:...

    如何批量修改字母标点全角半角?.docx

    批量修改字母标点全角半角的方法和技巧 在文档处理过程中,经常会碰到需要批量修改字母标点全角半角的问题,这些问题看似简单,但实际上却非常繁琐。幸运的是,我们可以使用 EmEditor 等文本编辑器来批量修改字母...

Global site tag (gtag.js) - Google Analytics