按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
输入
SQL》SELECT A LN(A) FROM NUMBERS
EMAIL wyhsillypig@163。 77
…………………………………………………………Page 78……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
输出
ERROR
ORA…01428 argument …45 is out of range
这是因为我们忽视了参数的取值范围 负数是没有对数的 改写为
输入/输出
SQL》SELECT A LN ABS A FROM NUMBERS
A LN ABS A A LN ABS A
3。1415 1。1447004 …57。667 4。0546851
…45 3。8066625 15 2。7080502
5 1。6094379 …7。2 1。974081
分析
注意 你可以将 ABS 函数嵌入到 LN 函数中使用 第二个对数函数需要两个参数 其
中第二个参数为底数 下例将返回以 10 为底的 B 列的对数值
输入/输出
SQL》 SELECT B LOG B 10 FROM NUMBERS
B LOG(B;10) B LOG(B;10)
4 1。660964 42 。61604832
。707 …6。640962 55 。57459287
9 1。0479516 5。3 1。3806894
MOD
其实我们已经见过 MOD 函数了 在第三天的 表达式 条件及操作 就有它 我们
知道在 ANSI 标准中规定取模运算的符号为%在一些解释器中被函数 MOD 所取代 下例的
查询就返回了 A 与 B 相除后的余数
输入
SQL》SELECT A B MOD A B FROM NUMBERS
输出
A B MOD(A;B)
3。1415 4 3。1415
…45 。707 …。459
5 9 5
EMAIL wyhsillypig@163。 78
…………………………………………………………Page 79……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
…57。667 42 …15。667
15 55 15
…7。2 5。3 …1。9
POWER
该函数可以返回某一个数对另一个数的幂 在使用幂函数时 第一个参数为底数 第
二个指数
输入
SQL》SELECT A B POWER A B FROM NUMBERS
输出
ERROR
ORA…01428 argument 45 is out of range
分析
粗看时你可能会认为它不允许第一个参数为负数 但这个印象是错误的 因为像…4 这
样的数是可以做为底数的 可是 如果第一个参数为负数的话 那么第二个参数就必须是
整数 负数是不能开方的 对于这个问题可以使用 CEIL 或 FLOOR 函数
输入
SQL》SELECT A CEIL B POWER A CEIL B FROM NUMBERS
输出
A CEIL B POWER(A;CEIL(B))
3。1415 4 97。3976
…45 1 …45
5 9 1953125
…57。667 42 9。098E+73
15 55 4。842E+64
…7。2 6 139314。07
现在就可以有正确的结果了
SIGN
如果参数的值为负数 那么 SIGN 返回…1 如果参数的值为正数 那么 SIGN 返回 1
如果参数为零 那么 SIGN 也返回零 请看下例
EMAIL wyhsillypig@163。 79
…………………………………………………………Page 80……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
输入
SQL》SELECT A SIGN A FROM NUMBERS
输出
A SIGN A A SIGN A
3。1415 1 …57。667 …1
…45 …1 15 1
5 1 …7。2 …1
你也可以在 SELECT WHERE 子句中使用 SIGN
输入
SQL》SELECT A FROM NUMBERS WHERE SIGN A =1
输出
A
3。1415
5
15
SQRT
该函数返回参数的平方根 由于负数是不能开平方的 所以我们不能将该函数应用于
负数
输入/输出
SQL》SELECT A SQRT A FROM NUMBERS
ERROR
ORA…01428 argument '…45' is out of range
但是你可以使用绝对值来解除这一限制
输入/输出
SQL》SELECT ABS A SQRT ABS A FROM NUMBERS
ABS(A) SQRT(ABS(A))
3。1415 1。7724277
45 6。7082039
5 2。236068
57。667 7。5938791
EMAIL wyhsillypig@163。 80
…………………………………………………………Page 81……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
15 3。8729833
7。2 2。6832816
0 0
字符函数
许多 SQL 解释器都提供了字符和字符串的处理功能 本部分覆盖了大部分字符串处理
函数 这一部分的例子使用 CHARACTERS 表
输入/输出
SQL》 SELECT * FROM CHARACTERS
LASTNAME FIRSTNAME M CODE
PURVIS KELLY A 32
TAYLOR CHUCK J 67
CHRISTINE LAURA C 65
ADAMS FESTER M 87
COSTALES ARMANDO A 77
KONG MAJOR G 52
CHR
该函数返回与所给数值参数等当的字符 返回的字符取决于数据库所依赖的字符集
例如示例的数据库采用了 ASCLL 字符集 示例数据库的代码列的内容为数字
输入
SQL》SELECT CODE CHR CODE FROM CHARACTERS
输出
CODE CH CODE CH
32 87 W
67 C 77 M
65 A 52 4
在数值 32 处显示为空白 因为 32 在 ASCLL 码表中是空格
CONCAT
我们在第 3 天时学到过一个与这个函数所执行的功能相当的操作 符号表示将两个
EMAIL wyhsillypig@163。 81
…………………………………………………………Page 82……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
字符串连接起来 CONCAT 也是完成这个功能的 使用方法如下
输入
SQL》SELECT CONCAT FIRSTNAME LASTNAME 〃FIRST AND LAST NAMES〃
FROM CHARACTERS
输出
FIRST AND LAST NAMES
KELLY PURVIS
CHUCK TAYLOR
LAURA CHRISTINE
FESTER ADAMS
ARMANDO COSTALES
MAJOR KONG
分析
当用多个词来做为别名时需对它们使用引号 请检查你的解释器 看看它是否支持别
名
需要注意的是尽管在看起来输出似乎是两列 但实际上它仍是一列 这是因为你所连
接的 Firstname 字段的宽度为 15 函数取得了该列中的所有数据 包括其中用以补足宽度
的空格
INITCAP
该函数将参数的第一个字母变为大写 此外其它的字母则转换成小写
输入
SQL》SELECT FIRSTNAME BEFORE INITCAP FIRSTNAME AFTER
FROM CHARACTERS
输出
BEFORE AFTER
KELLY Kelly
CHUCK Chuck
LAURA Laura
FESTER Fester
ARMANDO Armando
MAJOR Major
EMAIL wyhsillypig@163。 82
…………………………………………………………Page 83……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
LOWER 和 UPPER
如你所料 LOWER 将参数转换为全部小写字母而 UPPER 则把参数全部转换成大写字
母
下例是用 LOWER 函数和一个叫 UPDATE 的函数来把数据库的内容转变为小写字母
输入
SQL》UPDATE CHARACTERS SET FIRSTNAME='kelly'
WHERE FIRSTNAME='KELLY'
输出
1 row updated。