首页 > 数据库 >数据库知识

数据库知识

时间:2022-11-06 16:46:28浏览次数:62  
标签:返回 函数 -- 数据库 知识 jsp dual select

1.listagg**

想象一个场景,现实生活中一个人有许多手机号已是常态,数据库中也会有类似的结构。

大家肯定想知道listagg()有什么样的效果:

案列分析

一个表中有许多数据,名字叫张三的有许多手机号。希望查询结果出来是分组且清晰。

select * from PersonInFo;

img

先查询李四。

select 姓名, listagg(手机号,',')
within group (order by 姓名) 手机号
from PersonInFo
where 姓名='李四'
group by 姓名;

img

再查询张三。

img

相信大家对应sql语句已经知道了listagg()函数的使用,在演示案列中,为了见名知意数据库字段直接使用中文,大家可以设置为英文,然后去个别名进行显示。

2.verify验证使用说明---------------------------------------------------------------------------------------------------------------------------------------------------------
作者:系统管理员 最后修改:2013年10月09日 浏览数:3230
基本原理
  通过使用html中表单元素的自定义属性verify和condition来达到自动校验表单元素是否填写正确、并根据校验结果提示相应信息的目的。页面初始化时会为每个带有verify属性的表单元素附加相应的onkeyup、onchange、onfocus事件,以便于这些事件被触发时自动校验与提示。

在html中的用法
  Verify在html中的用法如下所示:
  其中verify属性值为校验字符串,由以"|"分隔的两部分组成,前半部分表示控件信息,后半部分表示校验规则,一个控件可以有多个校验规则,各个校验规则之间以"&&"分隔。condition属性值表示当condition所指明的JavaScript语句返回值为真时才校验,否则不校验。
可用的校验规则包括:
  NotNull:不能为空。
  Number:必须是数字。
  Int:必须是整数。
  Time:必须是时间。
  Date:必须是日期。
  DateTime:必须是带日期的时间。
  Email:必须是合法的电子邮件地址。
  Regex:表示控件值必须符合指定的正由表达式,例如verify="Regex=\d{4}"表示控件值必须是4位数字。
  Script:表示指定的JavaScript脚本返回值必须为真,例如verify="Script=check()"表示执行check(),如果check()返回值为真则校验通过,否则校验不通过。
  以上为例,如果onkeyup、onchange、onfocus事件触发时$NV('Type')=='Custom'成立且控件的值为空或者不是整数,则会自动提示"代码为不能为空"或者"代码为必须是整数"。
  
提交数据时的用法
  表单提交或者调用Server.sendRequest时需要事先校验页面中的相应元素是否已正确填写,这时可以使用类似如下的JavaScript语句:
if(Verify.hasError(arr,ele)){
return;
}
Verify.hasError会自动检查ele下的所有(但不在arr之内)的表单元素是否己正确填写,如果有未正确填写的,则弹出提示对话框。如果Verify.hasError的参数为空,则检查整个页面。
示例(校验表单F1下所有表单元素,但不包括ID为Code和Name的元素):
if(Verify.hasError(["Code","Name"],"F1")){
return;
}

注意事项
  校验规则为1-7时,提示信息=控件信息+校验规则含义,如verify="ID|NotNull"且校验未通过时,则提示"ID不能为空";
  校验规则为1-7时,校验字符串可以不写提示信息,如verify="NotNull"且校验未通过时,则提示"不能为空";
  校验规则为8、9时,提示信息就是控件信息,如verify="必须是合法的IP|Regex=\d{1-3}.\d{1-3}.\d{1-3}.\d{1-3}"且校验未通过时,则提示"必须是合法的IP"。
2.jsp的<%@include和jsp:include的问题---------------------------------------------------------------------------------------------------------------------------------------------------------
举个例bai子,你现在的index.jsp,要包含一个文件abc.jsp.

  • 首先,<%@duinclude file="abc.jsp" %> 这个是include directive
    如果,你选用这个include,那么意zhi味着,abc.jsp里的所有Java,HTML代码原封dao不动的都被复制粘贴到当前的文件。和你手动复制粘贴效果是一样。这个的作用就是省了复制粘贴的功夫了。当访问index.jsp的时候,这个request(请求),是一次性完成。
  • 其次,
    <jsp:include page="abc.jsp" flush="true">
    <jsp:param name="name" value="abc" />
    </jsp:include>
    这个是include action, 或叫include tag。当你使用这个的时候,意味着你访问abc.jsp,然后把abc.jsp输出的HTML(注意,和在IE里看到的HTML是一样)全部放到你include的位置。当访问index.jsp的时候,这个request(请求),是用户先请求index.jsp,然后服务器再自动请求abc.jsp,合成最终的index.jsp,然后response(回应)给客户端。
  • 二者比较:
  1. 二者一个是直接包含原代码,一个是包含请求出的HTML。
  2. jsp:include的话,如果abc.jsp里有response.redirect("")或者response.addCookie("")等等关于response的操作,都回被忽视。也就是说用户不回被送到另一个页面。
    但此时用%@include的话,abc.jsp里所有动response的操作都会正常运行。
  3. jsp:include因为它是向abc.jsp发送一个请求,所以请求可包含jsp:param,就是parameter(参数)。
    若用%@include,就不可以加参数。
  4. 速度上,%@include会快一些,因为他只是处理一个请求。而jsp:include是处理两个请求,所以慢一点。
  5. <jsp:include page="http://www.google.com/search?q=abc" />这样都可以,相当于把有HTML包含。
    但在<%@include file="abc.jsp" />中,只可以包含你自己网站里的原始代码,也就是说abc.jsp必须存在,若不存在,会出现Compilation Error(编译错误)。
  6. 使用上%@include比较常用,一般用于检测用户是否登陆,或者网站的LOGO,网站的一些静态不变的信息。
    jsp:include一般用于发送一个请求,并接受所回应的HTML。可以加入Parameter(参数)。
    具体请看Sun 的Documentation
    jsp:include

3.sql函数---------------------------------------------------------------------------------------------------------------------------------------------------------
查询语句select to_char(replace(wm_concat(trim(ITIssueList)),',',';')) from lis.LLClaimITIssueList
这个查询语句里面有三个sql函数
to_char Oracle to_char函数的功能是将数值型或者日期型转化为字符型
wm_concat wm_concat(列名)这个神奇的函数,他可以把列值用“,”分隔开,而且是显示成一行
trim 出去空字符串

4.oracle中的greatest,least函数,不同于maxmin针对同一列的数据比较---------------------------------------------------------------------------------------------------------------------------------------------------------
SELECT id, chinese, math, english, greatest(chinese, math, english) max,least(chinese, math, english) min FROM tb;
greatest 显示每行数据中选定的几个列的最大值
least 显示每行数据中选定的几个列的最小值

5.exists函数---------------------------------------------------------------------------------------------------------------------------------------------------------

6.nvl函数---------------------------------------------------------------------------------------------------------------------------------------------------------

NVL函数是一个空值转换函数
NVL(表达式1,表达式2)
如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值。 该函数的目的是把一个空值(null)转换成一个实际的值。其表达式的值可以是数字型、字符型和日期型。但是表达式1和表达式2的数据类型必须为同一个类型。
对数字型: NVL( comm,0);
对字符型 NVL( TO_CHAR(comm), 'No Commission')
对日期型 NVL(hiredate,' 31-DEC-99')
例子:
select  ename,NVL(TO_char(comm), ename||' is not a salesperson!') AS COMMISSION
from emp
二 NVL2(表达式1,表达式2,表达式3)
如果表达式1为空,返回值为表达式3的值。如果表达式1不为空,返回值为表达式2的值。
例如 NVL2(comm,'sal+comm',sal)
NVL2函数测试comm
如果comm为空,就返回sal 的值。如果 comm 不为空(null),就返回表达式 sal+comm的值。

7.LEAST()函数与GREATEST()函数相反。其目的是为了从值列表(N1,N2,N3,等等)返回至小值项。下面的示例显示了LEAST()函数正确的使用和输出:
SQL>SELECT LEAST(3,5,1,8,33,99,34,55,67,43);
+---------------------------------------------------------+
| LEAST(3,5,1,8,33,99,34,55,67,43) |
+---------------------------------------------------------+
| 1 |
+---------------------------------------------------------+

Oracle比较一列的最大值或者最小值,我们会不假思索地用MAX和MIN函数,但是对于比较一行的最大值或最小值呢?是不是日常用的少,很多人都不知道有ORACLE也有内置函数实现这个功能:COALESCE / GREATEST /LEAST.
1. COALESCE 返回该表达式列表的第一个非空value。
    格式: COALESCE(value1, value2, value3, ...)
    含义: 返回value列表第一个非空的值。
value列表必须是相同类型,也可以是一个表的同一行、不同列的值进行比较。
EXAMPLE: select coalesce (1, null, 2 ) from dual ; -- 返回1
select coalesce ( null, 2, 1 ) from dual ; -- 返回2
select coalesce (t.empno, t.mgr ) from  scott.emp t ; -- 效果类似 NVL( t.empno, t.mgr )
2. GREATEST 返回值列表中最大值
    格式: GREATEST(value1, value2, value3, ...)
    含义: 返回value列表最大的值。
value列表必须是相同类型,也可以是一个表的同一行、不同列的值进行比较。
当value值列表中有一个为NULL,则返回NULL值。
 EXAMPLE: select greatest (1, 3, 2 ) from dual ; -- 返回3
select greatest ( 'A', 'B', 'C' ) from dual ; -- 返回C
select greatest (null, 'B', 'C' ) from dual ; -- 返回null
select greatest (t.empno, t.mgr ) from  scott.emp t ; -- 返回empno和mgr 较大值
3. LEAST 返回值列表中最小值
    格式: LEAST(value1, value2, value3, ...)
    含义: 返回value列表最小的值。
value列表必须是相同类型,也可以是一个表的同一行、不同列的值进行比较。
当value值列表中有一个为NULL,则返回NULL值。
EXAMPLE: select least (1, 3, 2 ) from dual ; -- 返回1
select least ( 'A', 'B', 'C' ) from dual ; -- 返回A
select least (null, 'B', 'C' ) from dual ; -- 返回null
select least (t.empno, t.mgr ) from  scott.emp t ; -- 返回empno和mgr 较小值

8.oracle中的常用的函数的总结:---------------------------------------------------------------------------------------------------------------------------------------------------------

1、add_months(x,y)或者add_months(times,months)函数:
(1)用途:这个函数用于计算在时间x之上机上Y个月后的时间值,要是Y的值为负数的话就是在这个时间点之间的时间值(这个时间-Y个月)。
(2)用法实例:
A:--从emp表查询列出来公司就职时间超过24年的员工名单
select ename, hiredate from emp where hiredate <= add_months(sysdate, -288);
--负数代表系统时间(sysdate)之前的24年的时间-288 = -24*12
B:--查询出在员工'SCOTT'入职一年后入职的员工的信息
select ename, a.hiredate, sal from emp a, (select hiredate from emp where ename = 'SCOTT') b where a.hiredate > = add_months(b.hiredate, 12);
解析:上面的查询思路如下
a:在from语句的后面将员工'SCOTT'的入职时间查出放在一个表里,表的别名为b
b:将上面的b表再次作为查询表
c:然后利用add_months(x,y)函数在b表的hiredate之后的12个月作为查询条件
C:--查询半年前的时间
select add_months(sysdate,-6) from dual;
解析:dual是oracle提供的最小功能表,它只有一行一列
2.今天对add_months函数进行简单总结一下:
add_months 函数主要是对日期函数进行操作,在数据查询的过程中进行日期的按月增加,其形式为:
add_months(date,int);其中第一个参数为日期,第二个为按月增加的幅度,例如:
add_months (sysdate,2):就是当前日期的两个月之后的时间。
如:表示2个月以后的时间:
1
2
3
4
SQL> select add_months(sysdate,2) from dual; 
 ADD_MONTHS(SYSDATE,+2)
----------------------
2012-5-16 下午 02:30:47
表示2个月以前的时间,可以用下列语句
1
2
3
4
SQL> select add_months(sysdate,-2) from dual;
ADD_MONTHS(SYSDATE,-2)
----------------------
2011-11-16 下午 02:32:39
如果第一个参数即当前日期的地方是某一个指定的具体日期,则该日期需要使用to_date('20190101','yyyymmdd')进行转换,如下:
1
select * from tb_user where create_date_time>to_date('20190101','yyyymmdd')and create_date_time<tadd_months(to_date('20190101','yyyymmdd'),2)
以上语句表示查询日期在20190101到20190301之间的数据
知识点扩展:Oracle中add_months()函数的用法
查询当前时间1个月以前的时间:
1
select add_months(sysdate,-1) from dual;
查询当前时间1个月以后的时间:
1
select add_months(sysdate,1) from dual;
如对公司员工表:查询2年前进入公司的员工的姓名:
1
select Ename from Company where sysdate >add_months(time,2*12);

9.case函数---------------------------------------------------------------------------------------------------------------------------------------------------------

SQL语句中case函数
case函数,严格的意义上来讲case函数已经试流程控制语句了,不是简单意义上的函数,不过为了方便,很多人将case函数称为流程控制函数。
case函数的一般有两种用法:1.case expression
        when value1 then returnvalue1
        when value2 then returnvalue2
        when value3 then returnvalue3
        else   defaultvalue
        end
    上述的第一种用法就是:case函数对表达式expression进行测试,如果expression等于value1则返回returnvalue1.依次类推如果不符合条件的所有的when条件,就返回默认值defaultvalue。
可见case函数跟普通的switch   case语句非常类似,使用case函数我们可以实现复杂的业务逻辑,下面的sql语句就是就是用来判断是好孩子,我们偏爱tom所以我们认为他是好孩子,jack是坏孩子,其他的都是普通孩子
select fname, (
        case fname
        when 'tom' then '好孩子'
        when 'jack' then '坏孩子'
        else '普通孩子'
        end
) as isgoodchild
from T_person
2:case函数在做报表的时候非常有用,比如T_customer表中的flevel字段是整数类型,它记录着客户的级别,如果是1是VIP用户,如果是2就是高级用户,
如果是3就是普通用户,在制作报表的时候不应该把1,2,3这样的数字显示在报表中而应该显示它的文字,这里就可以用case函数来实现
select fname,
(
      case flevel
      when 1 then 'VIP客户'
      when 2 then '高级客户'
      when 3 then '普通客户'
      else '客户类型错误'
      end
) as flevelName
from T_customer
用法二:
上面的case用法只能用来实现简单的等于的逻辑判断,要实现“如果年龄小于18则返回未成年人”否则返回“成年人”是无法完成的,这就是需要case的第二种用法了。
	case 
    when condition1 then returnvalue1
    when condition2 then returnvalue2
    when condition3 then returnvalue3
    else   defaultvalue
    end
解释:condition1,condition2,condition3为条件表达式。case函数对各个表达式从前向后进行测试。如果条件1为真的时候就返回条件1对应的值returnvalue1,否则如果condition2为真的时候就返回returnvalue2........以此类推 如果都不符合条件就返回默认值defaultvalue.这种用法没有只能对一个表达式进行判断,因此使用起来更加灵活,比如下面的sql语句判断一个人的体重是不是正常,如果体重大于50偏重,小于40偏轻,介于40到50之间正常。
select
fname,fweight,(
    case
    when fweight <40 then 'thin'
    when fweight > 50 then 'fat'
    else 'ok'
    end
) as isnormal
from T_person.

10-----------decode函数--------------------------------------------------------

decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)
这个是decode的表达式,具体的含义解释为:
IF 条件=值1 THEN
RETURN(翻译值1)
ELSIF 条件=值2 THEN
RETURN(翻译值2)
......
ELSIF 条件=值n THEN
RETURN(翻译值n)
ELSE
RETURN(缺省值)
END IF

11 TO_NUMBER函数() ------------------------------------------

TO_NUMBER函数()是Oracle中常用的类型转换函数之一,主要是将字符串转换为数值型的格式,与TO_CHAR()函数的作用正好相反。
To_number函数的格式如下:
To_number(varchar2 or char,’format model’)

12.oracle中LPAD和RPAD函数的使用方法(加个人总结)

今天看到两个没有见过的SQL中的函数,总结一下;函数参数:
lpad( string1, padded_length, [ pad_string ] )中tring1源字符串。
added_length: 即最终结果返回的字符串的长度;如果最终返回的字符串的长度比源字符串的小,那么此函数实际上对源串进行截取处理,与substr(string,number1,number2)的作用完全相同,如果padded_length比源字符串的长度长,则用pad_string进行填充,确保返回的最终字符串的长度为padded_length;
pad_string:用于填充的字符,可以不填,默认为空字符

实例:
select lpad('123456',2) from dual
--结果为 12
select lpad('123456',7,'0') from dual
--结果为 0123456--注意在左侧填充 lpad中的l为left,左侧的意思
select rpad('123456',2,'0') from dual
--结果为 12
select rpad('123456',7,'0') from dual
--结果为 1234560--rpad 填充在右侧,r为right 右侧
**总结:**
可以看到,当string1源字符串的长度小于padded_length时,lpad、rpad的作用是相同的,都是相当于substr截取字符串,当padded_length大于string1源字符串的长度时,lpad为在源字符串的左侧填充指定字符或者空格,rpad为在源字符串的右侧填充指定字符或者空格;

13

1、instr()函数的格式 (俗称:字符查找函数)

格式一:instr( string1, string2 ) // instr(源字符串, 目标字符串)

格式二:instr( string1, string2 [, start_position [, nth_appearance ] ] ) // instr(源字符串, 目标字符串, 起始位置, 匹配序号)

解析:string2 的值要在string1中查找,是从start_position给出的数值(即:位置)开始在string1检索,检索第nth_appearance(几)次出现string2。

注:在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置。只检索一次,也就是说从字符的开始到字符的结尾就结束。

2、实例

格式一

1 select instr('helloworld','l') from dual; --返回结果:3    默认第一次出现“l”的位置
2 select instr('helloworld','lo') from dual; --返回结果:4    即“lo”同时出现,第一个字母“l”出现的位置
3 select instr('helloworld','wo') from dual; --返回结果:6    即“wo”同时出现,第一个字母“w”出现的位置

格式二

[复制代码](javascript:void(0)

标签:返回,函数,--,数据库,知识,jsp,dual,select
From: https://www.cnblogs.com/javaxubo/p/16862952.html

相关文章

  • pg数据库百分比处理二
    感谢原文链接:https://blog.csdn.net/magi1201/article/details/115719675PostgreSQL数据库中,两个integer类型数据,如何处理为百分比形式有表student,其中id字段为charac......
  • pg数据库百分比处理
    参考声明:https://blog.csdn.net/magi1201/article/details/115719675PostgreSQL数据库中,两个integer类型数据,如何处理为百分比形式有表student,其中id字段为characte......
  • 【WPF】ConfigurationManager连接sqlite数据库
     提供对客户端应用程序配置文件的访问。此类不能被继承。1、引用ConfigurationManager在Nuget引入ConfigurationManager。usingSystem.Configuration;  2、添......
  • SQLServer数据库优化
    当遇到如下250的SQL时,又没办法改SQL,只能优化数据库的情况下。索引pid,no,equipmentCode,和索引pid,有着巨大的差异。在索引中包含orderby的列,将极大提升速度。ROW_NUMB......
  • 关于变量的一些小知识 (纯新手)
    首先就是变量有好几种,第一字面变量就是常数123这种,然后就是变量名,我们自己定义的什么num啊这些,但是呢同一个变量名是可以赋值多个的,比如我这个,也是没有问题的2就是有个cons......
  • @RequestMapping注解(超详细基础知识+实际代码案例)
    1、@RequestMapping注解的功能从注解名称上我们可以看到,@RequestMapping注解的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系。SpringMVC接收到指定的请求,......
  • 第三十八章 构建数据库应用程序 - 处理表单提交请求
    第三十八章构建数据库应用程序-处理表单提交请求除了在表单中显示对象的内容外,前面的示例还在用户通过单击Save提交表单时保存对对象的更改。它的工作原理如下。当表......
  • 知识蒸馏 -- 定位蒸馏LD
    定位蒸馏定位蒸馏:LocalizationDistillation,简称LD论文地址:LocalizationDistillationforDenseObjectDetection开源代码地址:https://github.com/HikariTJU/LDMM......
  • MySQL索引开发中可能会用到的知识总结
    索引 适合建立索引建立索引之后,在B+树中的记录是排序好的,所以频繁使用orderby和group的字段可以建立索引,同时唯一性限制的字段也适合建立索引,比如商品编码经......
  • 002.打通数据库链路
    1.配置数据库application.propertiesspring.datasource.name=imooc_mall_datasourcespring.datasource.url=jdbc:mysql://127.0.0.1:3306/imooc_mall?useUnicode=true&c......