简单实用的sql小技巧(第二篇)(r3笔记第86天)

ASCII和CHR 在平时的工作中,可能会在sql或者pl/sql块中嵌入特殊字符,比如空格,回车之类。这个时候可以使用ascii和chr来做字符和ascii码的转换。 比如我们想得到字母a对应的ascii码,可以使用ascii来实现。

SQL>  select  ascii('a') from dual;
ASCII('A')
----------
         97

如果反推,需要根据ascii码值来得到对应的字符,就可以使用chr

SQL> select chr(97) from  dual;
CHR
---
a

关于ascii码对应的字符,总结的列表如下。对于前32个ascii码来说,是不可见字符。所以使用描述代替。这部分特殊字符在平时的工作中使用的地方还是比较多的。像回车符,换行符,空格都很常用。 用到的时候可以参考一下。

ascii码

对应的字符

ascii码

对应的字符

0

null

64

@

1

start of heading

65

A

2

start of text

66

B

3

end of text

67

C

4

end of transmission

68

D

5

enquiry

69

E

6

acknowledge

70

F

7

bell

71

G

8

backspace

72

H

9

horizontal tab

73

I

10

new line

74

J

11

vertical tab

75

K

12

new page

76

L

13

carriage return

77

M

14

shift out

78

N

15

shift in

79

O

16

data link escape

80

P

17

device control 1

81

Q

18

device control 2

82

R

19

device control 3

83

S

20

device control 4

84

T

21

negative acknowledge

85

U

22

synchronous idle

86

V

23

end of trans. block

87

W

24

cancel

88

X

25

end of medium

89

Y

26

substitute

90

Z

27

escape

91

[

28

file separator

92

\

29

group separator

93

]

30

record separator

94

^

31

unit separator

95

_

32

space

96

`

33

!

97

a

34

"

98

b

35

#

99

c

36

$

100

d

37

%

101

e

38

&

102

f

39

'

103

g

40

(

104

h

41

)

105

i

42

*

106

j

43

+

107

k

44

,

108

l

45

-

109

m

46

.

110

n

47

/

111

o

48

0

112

p

49

1

113

q

50

2

114

r

51

3

115

s

52

4

116

t

53

5

117

u

54

6

118

v

55

7

119

w

56

8

120

x

57

9

121

y

58

:

122

z

59

;

123

{

60

<

124

|

61

=

125

}

62

>

126

~

63

?

127

DEL

DUMP 对于一些特殊字符,有些是不可见字符,如果在客户端查看根本判断不出来。这个时候一旦出现什么问题,可以根据dump来查看是否存在特殊字符。举个简单的例子。

create  table test(id number,name varchar2(100));
insert into test values(1,'this is  a test');
insert into test values(2,'this is a  test'||chr(10));
commit;
SQL> col dump_name format a100
SQL> col  name format a30
SQL> select *from test;   --通过客户端查看,根本看不出区别来。一旦出现问题是很难查的。
        ID NAME
----------  ------------------------------
         1 this is a test
         2 this  is a test
SQL> select id,dump(name)dump_name from test;   -使用dump来解析,最后的"10“就是不可见字符,是一个换行符。
        ID DUMP_NAME
----------  ----------------------------------------------------------------------------------------------------
          1 Typ=1 Len=14: 116,104,105,115,32,105,115,32,97,32,116,101,115,116
          2 Typ=1 Len=15: 116,104,105,115,32,105,115,32,97,32,116,101,115,116,10

TO_CHAR (DATE) 关于to_char的使用,功能还是很强大的。看似简单的一个转换竟然能够实现很复杂的逻辑。 比如我们先得到当前的时间戳。 SQL> select to_char(sysdate,'yyyy--mm-dd hh24:mi:ss') now_date from dual; NOW_DATE ------------------------------------------------------------ 2014--12-16 17:46:39 得到这个月最后一天的信息,如果是在复杂的业务逻辑中判断能省去不少事。 SQL> select last_day(sysdate) from dual; LAST_DAY(SYSDATE) ------------------ 31-DEC-14 查看今天是这周的第几天。 SQL> select to_char(sysdate,'d') from dual; TO_ --- 3 查看今天是星期几。 SQL> select to_char(sysdate,'day') from dual; TO_CHAR(SYSDATE,'DAY') --------------------------- tuesday SQL> select to_char(sysdate,'dy') from dual; TO_CHAR(S --------- tue 查看今天是一年中的第几天 SQL> select to_char(sysdate,'ddd') from dual; TO_CHAR(S --------- 350 查看今天是这个月的第几天 select to_char(sysdate,'dd') from dual; TO_CHA ------ 16 查看今天是一年中的第几周 SQL> select to_char(sysdate,'ww') from dual; TO_CHA ------ 50 查看月份 SQL> select to_char(sysdate,'MM') from dual; TO_CHA ------ 12 select to_char(sysdate,'mm') from dual; TO_CHA ------ 12 今天属于当月的第几周。 SQL> select to_char(sysdate,'W') from dual; TO_ --- 3

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-12-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能LeadAI

深度学习之主流数据库 | MySQL基础

这篇文章主要是讲一下常见的MySQL的安装,和基本操作。适合完全没有MySQL知识但是又急需一些MySQL知识的童靴作为快速入门使用。 背景与安装 背景不用多说...

4986
来自专栏小狼的世界

Mysql运行模式及1690错误处理

经过查询,发现这个错误的原因是两个时间字段进行减法运算时,如果有一个时间为0000-00-00时造成的,根本原因是因为这样减法的结果会超过Mysql数值字段的范...

1092
来自专栏chenssy

【死磕Sharding-jdbc】---group by结果合并(1)

在sharding-jdbc源码之结果合并中已经分析了OrderByStreamResultSetMerger、LimitDecoratorResultSetM...

1092
来自专栏程序员的SOD蜜

PDF.NET数据开发框架 之SQL-MAP使用存储过程

有关SQL-MAP的规范性介绍,请看下面的文章: PDF.NET(PWMIS数据开发框架)之SQL-MAP目标和规范 在SQL-MAP中使用存储过程 1...

25710
来自专栏java系列博客

oracle 中start with ... connect by prior 子句的用法

1702
来自专栏数据库

干货!超过500行的Mysql学习笔记

本文为作者初学Mysql时做的笔记,囊括了Mysql相关基本知识,内容较多超过500行笔记,希望对大家有帮助。 ? /* 启动MySQL */ net star...

2156
来自专栏cs

python链接mysql数据库

PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。

1154
来自专栏蓝天

MySQL的NO_BACKSLASH_ESCAPES

官方说明: https://dev.mysql.com/doc/refman/5.7/en/mysql-real-escape-string.html 相...

1224
来自专栏Python小屋

Python+SQLite开发无界面版通信录管理系统

本文重点在于演示Python对SQLite数据库的操作,以及命令行式菜单的工作原理和实现。 首先使用SQLite Database Browser创建SQLit...

41213
来自专栏MasiMaro 的技术博文

ADO对SQL Server 2008数据库的基础操作

最近在学习ADO与数据库的相关知识,现在我将自己学到的东西整理写出来,也算是对学习的一种复习。

1362

扫码关注云+社区