Oracle不可见字符

本文最后更新于:2020-04-19 17:23 星期日

Oracle 不可见字符处理

1. 处理过程

  1. 表结构
1
2
3
create table telphone_temp_20190821(
telnum varchar2(32)
);
  1. 查询数据,确定ASCII值
1
select ROWNUM||'#'||trim(telnum)||'#'||lengthb(telnum)||'#'|| dump(telnum) from telphone_temp_20190821 where  ROWNUM <3;
1
2
3
4
ROWNUM||'#'||TRIM(TELNUM)||'#'||LENGTHB(TELNUM)||'#'||DUMP(TELNUM)
-----------------------------------------------------------------
1# 146 #17#Typ=1 Len=17: 9,9,49,52,54,9,9
2# 144 #15#Typ=1 Len=15: 9,9,49,52,52,9,9

不可见字符 ASCII 值等于9

1
select chr(9) from dual;
  1. replace剔除不可见字符,利用chr()函数将数值转换成不可见字符
1
select replace(telnum, chr(9), '') from telphone_temp_20190821 where ROWNUM <3;

2. Oracle 函数

  1. dump(expression [, return_format] [, start_position] [, length] )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
expression:要分析的表达式。
return_format:决定了返回值的格式,该参数可以是以下任何值:
8 :八进制符号
10 :十进制符号
16 :十六进制符号
17 :单个字符
1008 :带字符集名称的八进制符号
1010 :带字符集名称的十进制符号
1016 :带字符集名称的十六进制符号
1017 :带字符集名称的单个字符
start_position :可选的,要返回的内部表示的起始位置。
length :可选的,要返回的内部表示的长度。
返回值: Typ=1 Len=17: [CharacterSet=ZHS16GBK] 9,9,49,52,54,9,9
● Type : 字段类型(见表格)
● Len :长度
● 每个字符的 Ascii值
  1. lengthb():返回的是 字节数
1
2
3
4
5
6
7
8
select length('Oracle') from dual
结果:6
select lengthb('Oracle') from dual
结果:6
select length('甲骨文') from dual
结果:3
select lengthb('甲骨文') from dual
结果:6
  • length() :返回的是 字符数
  • trim() :函数从字符串的开头,结尾或两端删除空格或指定的字符。
  • replace(char, search_string [, replace_string]):) 如果没有指定replace_string 变量的值,那么当发现search_string 变量的值时,就将其删除
  • ascii(single_character) :返回代表指定字符的数字值代码
  • chr(number_code) :函数可以根据数字代码返回字符

3. 对照表

ASCII对照表

ASCII值控制字符ASCII值控制字符ASCII值控制字符ASCII值控制字符
0NUT32(space)64@96
1SOH33!65A97a
2STX3466B98b
3ETX35#67C99c
4EOT36$68D100d
5ENQ37%69E101e
6ACK38&70F102f
7BEL39,71G103g
8BS40(72H104h
9HT41)73I105i
10LF42*74J106j
11VT43+75K107k
12FF44,76L108l
13CR45-77M109m
14SO46.78N110n
15SI47/79O111o
16DLE48080P112p
17DCI49181Q113q
18DC250282R114r
19DC351383S115s
20DC452484T116t
21NAK53585U117u
22SYN54686V118v
23TB55787W119w
24CAN56888X120x
25EM57989Y121y
26SUB58:90Z122z
27ESC59;91[123{
28FS60<92/124
29GS61=93]125}
30RS62>94^126`
31US63?95_127DEL

特殊字符解释

NUL空VT 垂直制表SYN 空转同步
STX 正文开始CR 回车CAN 作废
ETX 正文结束SO 移位输出EM 纸尽
EOY 传输结束SI 移位输入SUB 换置
ENQ 询问字符DLE 空格ESC 换码
ACK 承认DC1 设备控制1FS 文字分隔符
BEL 报警DC2 设备控制2GS 组分隔符
BS 退一格DC3 设备控制3RS 记录分隔符
HT 横向列表DC4 设备控制4US 单元分隔符
LF 换行NAK 否定DEL 删除

Oracle字段类型

CODEType
1VARCHAR2
2NUMBER
8LONG
12DATE
23RAW
24LONG RAW
69ROWID
96CHAR
112CLOB
113BLOB
114BFILE
180TIMESTAMP
181TIMESTAMP WITH TIMEZONE
182INTERVAL YEAR TO MONTH
183INTERVAL DAY TO SECOND
208UROWID
231TIMESTAMP WITH LOCAL TIMEZONE

Oracle不可见字符
https://blog.dekun.wang/blog/8e3d9981.html
作者
Wang Dekun
发布于
2020-04-19 17:23 星期日
更新于
2023-06-01 22:41 星期四
许可协议