函数练习小结

NULL值与任何值进行四则运算后,其结果均为NULL
如果列别名包括空格或特殊字符,或者它是区分大小写的,那么需要双引号

把列与列,列与字符连接起来用||表示,用来合成列

输出显示关键字或者操作符的内容q‘[]‘表示
 [ ] , ! ! , : : , { } , ( ) ,  < > , . . 等都是可以,但切记,要成对出现

distinct去重的结果是不排序的

字符和日期要包含在单引号中
 字符大小写敏感,日期格式敏感
 默认的日期格式是DD-MON-RR

sql语句中的日期类型要与当前会话中的nls_date_format的格式相同

使用escape标识符
 select employee_id,last_name,job_id from employees where job_id like ‘%SA\_%‘ escape ‘\‘;
如果字符串中有两个连续的"_",那么是否需要两次转译?
SQL1:select * from t_like where y like ‘a\__d%‘ escape ‘\‘;
SQL2:select * from t_like where y like ‘a\_\_d%‘ escape ‘\‘;
经实验转译一次两次都可以

检索null时,无法用=或<>来进行判断,只允许用is null和is not null来进行判断。

运算优先级
1.算数运算符
2.连接符
3.比较符
4.IS [NOT] NULL, LIKE, [NOT] IN
5.[NOT] BETWEEN
6.不等于
7.NOT
8.AND
9.OR

排序结果中有null值,升序排序后,null值在最下面(反之在最上面),因为null值是未知的,也就是无穷大

如果需求是,非空值升序,空值显示在结果的最上面
select distinct department_id from employees order by 1 asc nulls first;
如果需求是,非空值降序,空值在显示结果的最下面
select distinct department_id from employees order by desc nulls last;

使用&和&&临时存储值,替代变量
使用替代变量,可以替代一下内容
where条件
order by子句
列表达式
表名
整个select语句
SQL> select employee_id,last_name,salary,department_id
  2  from employees
  3  where employee_id=&v_num;
Enter value for v_num: 101
old   3: where employee_id=&v_num
new   3: where employee_id=101

EMPLOYEE_ID LAST_NAME                     SALARY DEPARTMENT_ID
----------- ------------------------- ---------- -------------
        101 Kochhar                        17000            90
SQL> select last_name,department_id,salary*12
  2  from employees
  3  where job_id=‘&job_title‘;
Enter value for job_title: HR_REP
old   3: where job_id=‘&job_title‘
new   3: where job_id=‘HR_REP‘

LAST_NAME                 DEPARTMENT_ID  SALARY*12
------------------------- ------------- ----------
Mavris                               40      78000

SQL> select last_name,department_id,salary from employees where hire_date=to_date(‘&hd‘,‘yyyy-mm-dd‘);
Enter value for hd: 2008/1/13
old   1: select last_name,department_id,salary from employees where hire_date=to_date(‘&hd‘,‘yyyy-mm-dd‘)
new   1: select last_name,department_id,salary from employees where hire_date=to_date(‘2008/1/13‘,‘yyyy-mm-dd‘)

LAST_NAME                 DEPARTMENT_ID     SALARY
------------------------- ------------- ----------
Grant                                50       2600
hire_date=to_date(‘2008-01-13‘,‘yyyy-mm-dd‘)是在告诉数据库我输入的格式是怎么样的
hire_date=‘2008-01-13‘是直接输入,但是这种情况输入的格式必须跟nls_date_format相同

SQL> select employee_id,last_name,job_id,&column_name from employees
  2  where &condition
  3  order by &order_column;
Enter value for column_name: email
old   1: select employee_id,last_name,job_id,&column_name from employees
new   1: select employee_id,last_name,job_id,email from employees
Enter value for condition: manager_id=101
old   2: where &condition
new   2: where manager_id=101
Enter value for order_column: 1
old   3: order by &order_column
new   3: order by 1

EMPLOYEE_ID LAST_NAME                 JOB_ID     EMAIL
----------- ------------------------- ---------- -------------------------
        108 Greenberg                 FI_MGR     NGREENBE
        200 Whalen                    AD_ASST    JWHALEN
        203 Mavris                    HR_REP     SMAVRIS
        204 Baer                      PR_REP     HBAER
        205 Higgins                   AC_MGR     SHIGGINS

&和&&都表示需要输入参数,区别是&表示一次性参数 &&表示可多次引用

使用define命令创建和分配一个变量的值,使用undefine命令来删除一个变量
define employee_num=200
SQL> define employee_num=200
SQL> select employee_id,last_name,salary,department_id from employees
  2  where employee_id=&employee_num;
old   2: where employee_id=&employee_num
new   2: where employee_id=200

EMPLOYEE_ID LAST_NAME                     SALARY DEPARTMENT_ID
----------- ------------------------- ---------- -------------
        200 Whalen                          4400            10

SQL> undefine employee_num

使用 VERIFY 命令来显示替换变量之前和之后的值,默认值为ON,即显示替换变量之前之后的值

set verify off
show verify

SQL> select ascii(‘A‘) from dual;

ASCII(‘A‘)
----------
        65

SQL> select ascii(‘‘‘‘) from dual;

ASCII(‘‘‘‘)
-----------
         39
求单引号的ASCII码写法很特殊 两个单引带表一个单引

ascii只针对一个字符进行转换

SQL> select chr(39) from dual;

C
-

空格:chr(32)
回车:chr(13)
换行:chr(10)

instr在一个字符串中搜索指定的字符,返回发现指定的字符的位置
instr(c1,c2,I,J)
c1:被搜索的字符串
c2:希望搜索的字符串
I:搜索开始的位置,默认为1
J:出现的位置,默认为1

vsize(expr)  vsize返回expr的内部表示的字节数,如果expr是空的,那么这个函数返回null,此功能不支持直接clob数据

soundex(char)返回一个与给定的字符串读音几乎相同的字符串

select trim(‘a‘ from ‘aaaaaaabbbbbbbbbbbaaaaaa‘) from dual;

abs(n)返回指定值n的绝对值

to_multi_byte(char)半角转全角
to_single_byte(char)全角转半角

语法:ceil(n)
取大于等于数值n的最小整数
[email protected]> select ceil(9.9),ceil(9),ceil(9.1) from dual;

CEIL(9.9)     CEIL(9)  CEIL(9.1)
---------- ---------- ----------
         10            9           10

语法:floor(n)
取小于等于数值n的最大整数
[email protected]> select floor(9.9),floor(9),floor(9.1) from dual;

FLOOR(9.9)    FLOOR(9) FLOOR(9.1)
---------- ---------- ----------
          9            9             9

show parameter nls_date_format
 alter system set nls_date_format=‘yyyy-mm-dd hh24:mi:ss‘ scope=spfile
 nls_date_format 为静态参数,修改时必须加上scope=spfile子句,重启数据库参数生效

带有时区及毫秒的日期格式
 select systimestamp from dual;

返回数据库的时区
 select dbtimezone from dual;

scott用户如果不存在,利用脚本创建
 select username from dba_users where username=‘SCOTT‘;
 @?/rdbms/admin/utlsampl.sql

show linesize
show pagesize

清空sqlplus缓存区的内容
SQL>cl buff清空缓存区的内容

登录时读取的文件
 vi /u01/app/oracle/product/11.2.0/dbhome_1/sqlplus/admin/glogin.sql

power(x,y)返回x的y次幂。
SQL> select power(2,3) from dual;

POWER(2,3)
----------
         8
缺陷:y为小数会报错

sign(n)符号函数
当n>0时,sign(n)=1
当n=0时,sign(n)=0
当n<0时,sign(n)=-1

返回数据库的时区
select dbtimezone from dual;

alter database set time_zone=‘+08:00‘;
时区分东西,东时区都带+号标识,西时区用-号标识。
在一个特定的时间点,时区号越大(考虑正负号)的地方,时间越晚。

返回当前会话的时区
select sessiontimezone from dual;

SQL> select dbtimezone,sessiontimezone,current_date from dual;

DBTIME SESSIONTIMEZONE                                                             CURRENT_DATE
------ --------------------------------------------------------------------------- -------------------
+00:00 +08:00                                                                      2016-11-21 14:53:58
发现current_date时间为会话所在时区的时间

将当前会话改为西六区
 alter session set time_zone=‘-6:00‘;

dbtimezone:是数据库服务器所在的时区
sessiontimezone:是你的会话的时区
比如数据库服务器是放在英国(+00:00时区),而你在中国(+08:00)访问数据库,则sessiontimezone就是+08:00,dbtimezone就是+00:00

返回为当前会话所在时区的timestamp with time zone时间
[email protected]> select dbtimezone,sessiontimezone,current_timestamp from dual;

DBTIME SESSIONTIMEZONE CURRENT_TIMESTAMP
------ --------------- ----------------------------------------
+08:00 -06:00            06-JUN-12 04.14.37.777012 AM -06:00

QL> select current_timestamp(3) from dual;

CURRENT_TIMESTAMP(3)
---------------------------------------------------------------------------
21-NOV-16 01.04.14.905 AM -06:00

SQL> select current_timestamp from dual;

CURRENT_TIMESTAMP
---------------------------------------------------------------------------
21-NOV-16 01.09.44.191830 AM -06:00

巧妙显示为标准日期型
SQL> select current_timestamp,current_timestamp+0 from dual;

CURRENT_TIMESTAMP                                                           CURRENT_TIMESTAMP+0
--------------------------------------------------------------------------- -------------------
21-NOV-16 01.10.58.179676 AM -06:00                                         2016-11-21 01:10:58

scc或cc显示世纪

SQL> select to_char(sysdate,‘scc yyyy-mm-dd‘) from dual;

TO_CHAR(SYSDAT
--------------
 21 2016-11-21

q表示当前时间为一年的第几季度
 
SQL> select to_char(sysdate,‘q‘) from dual;

T
-
4

ww:一年中的第几周,w一个月中的第几周

SQL> select to_char(sysdate,‘ww‘),to_char(sysdate,‘w‘) from dual;

TO T
-- -
47 3

ddd:一年中的第几天,dd一个月中的第几天  d一周中的第几天
SQL> select to_char(sysdate,‘ddd‘),to_char(sysdate,‘dd‘),to_char(sysdate,‘d‘) from dual;

TO_ TO T
--- -- -
326 21 2

时间: 2024-12-22 22:56:35

函数练习小结的相关文章

SQL中convert()函数使用小结

CONVERT(data_type,expression[,style]) convert(varchar(10),字段名,转换格式) 说明:此样式一般在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar,char,varchar)相互转换的时候才用到. 语句 结果SELECT CONVERT(varchar(100), GETDATE(), 0) 07 15 2009 4:06PMSELECT CONVERT(varchar(100), GETD

函数基础小结

函数基础小结 一.定义函数 只检测语法,不执行代码 二.函数定义的三种方式 有参函数 无参函数 空函数 三.调用函数 def f1(): return 123 f = f1() f1()*2 lis = [f1(),2] 四.函数的返回值 return返回返回值,函数遇到return会终止,return可以返回任意数据类型的值,同时也可以返回多个值 函数只有在调用阶段才会接收返回值,默认返回None 五.函数的参数 5.1 形参 接收实参,具有描述意义,没有具体值 5.2 实参 具有具体的值,传

C++拷贝函数的小结,关于变量的作用域等---ShinePans

#include <iostream> using namespace std; class circle { private: double r0; public: circle(double r) { r0 = r; cout << r << "调用了球体的初始化的函数\n"; } circle(const circle &t){ r0 = t.r0; cout << "r=" << r0 &l

PHP 正则表达式常用函数使用小结

在PHP中有两套正则表达式函数库.一套是由PCRE(Perl Compatible Regular Expression)库提供的.PCRE库使用和Perl相同的语法规则实现了正则表达式的模式匹配,其使用以“preg_”为前缀命名的函数.另一套是由POSIX(Portable Operation System interface)扩展库提供的.POSIX扩展的正则表达式由POSIX 1003.2定义,一般使用以“ereg_”为前缀命名的函数. 两套函数库的功能相似,执行效率稍有不同.一般而言,实

函数ZwQuerySystemInformation小结

该函数存在于NTDLL.DLL动态链接库中.NTDLL.DLL负责ring3与ring0之间的通信.当使用子系统方式进行系统调用的时候,ntdll.dll和SSDT会配合使用.关于SSDT技术以后会讲解到. 关于ZwQuerySystemInformation这个函数可以用来查询进程信息.内核信息.硬件信息(例如CPU数目).句柄信息.时间信息等54个系统信息. 该函数的原型是 NTSTATUS WINAPI ZwQuerySystemInformation( __in          SYS

asp.net MVC helper 和自定义函数@functions小结

asp.net Razor 视图具有.cshtml后缀,可以轻松的实现c#代码和html标签的切换,大大提升了我们的开发效率.但是Razor语法还是有一些棉花糖值得我们了解一下,可以更加强劲的提升我们的开发效率,减少开发bug的出现. Razor 采用的是@ 尾巴符号,正是这个符号成就了Mvc开发效率的提升.下面了解一下和@相关的两个可以重用的helper.functions. 作为现代化的程序员,我们尽可能的遵守一个原则.不要重复你自己.所以能够重构的代码我们都会合并,但是这是对于后台代码C#

Python: 函数参数小结

参数的类型: 函数的参数有2种类型: 1. 函数定义时用于接收值的形式参数Parameters. 2. 函数调用时用于传递值的实际参数Arguments. 参数的传递: 传递方式有2种: 1. 值传递: 将实参的值复制一份给形参, 不管此值是原始值, 指针值还是堆对象值. 2. 引用传递: 将形参与实参引用相同的对象. 传递形式有2种: 1. 按位置传递: 2. 按命名传递: 形参的定义: 函数的形参可分为: 1. 普通参数 2. 默认参数: 具有默认值的参数 3. 变长参数: 根据传递参数传递

函数作用域小结

1.变量查找顺序:LEGB,作用域局部>外层作用域>当前模块中的全局>python内部作用域 2.只有模块,类,函数才能引入新作用域 3.对于一个变量,内部作用域先声明就会覆盖外部变量,不声明直接使用,就会使用外部作用域的变量 4.内部作用域要修改外部作用域的值时,全局变量要使用global关键字,嵌套作用域变量要使用nonlocal关键字,nonlocal是python3新增关键字,有了这个关键字,就能完美的实现闭包了.

[UE4]蓝图函数库小结

蓝图函数库的功能非常强劲,如果在项目中使用的话有时能达到事半功倍的效果. 蓝图函数库,Blueprint Function Library.可以非常方便的将代码中的函数暴露给所有的蓝图使用,同时也提供了很好的代码复用性.完成的蓝图函数库可以非常轻易的在其他项目中使用或者共享给其他人.由于在函数库中定义的所有函数都能在其他的蓝图中访问,可以说是和单例模式的C++代码接合的天然素材.也可以防止为了定义一些泛用的函数而频繁的使用接口继承. 使用起来也是非常的简单明了.类似下面的代码就可以完成一个蓝图函