当前位置:首页 » 编程语言 » sql函数练习
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql函数练习

发布时间: 2023-03-10 10:06:22

‘壹’ 求sql的全部函数!完整的加100分!

一.聚合函数
AVG 返回组中值的平均值。空值将被忽略
BINARY_CHECKSUM 返回对表中的行或表达式列表计算的二进制校验值。BINARY_CHECKSUM 可用于检测表中行的更改
CHECKSUM 返回在表的行上或在表达式列表上计算的校验值。CHECKSUM 用于生成哈希索引
CHECKSUM_AGG 返回组中值的校验值。空值将被忽略
COUNT 返回组中项目的数量
COUNT_BIG 返回组中项目的数量。COUNT_BIG 的使用与 COUNT 函数相似。它们之间的唯一差别是它们的返回值:COUNT_BIG 总是返回 bigint 数据类型值,而 COUNT 则总是返回 int 数据类型值
GROUPING "是一个聚合函数,它产生一个附加的列,当用 CUBE 或 ROLLUP 运算符添加行时,附加的列输出值为1,当所添加的行不是由 CUBE 或 ROLLUP 产生时,附加列值为0。
仅在与包含 CUBE 或 ROLLUP 运算符的 GROUP BY 子句相联系的选择列表中才允许分组"
MAX 返回表达式的最大值
MIN 返回表达式的最小值
SUM 返回表达式中所有值的和,或只返回 DISTINCT 值。SUM 只能用于数字列。空值将被忽略
STDEV 返回给定表达式中所有值的统计标准偏差
STDEVP 返回给定表达式中所有值的填充统计标准偏差
VAR 返回给定表达式中所有值的统计方差。
VARP 返回给定表达式中所有值的填充的统计方差。

二.数学函数
ABS 返回给定数字表达式的绝对值
ACOS 返回以弧度表示的角度值,该角度值的余弦为给定的 float 表达式;本函数亦称反余弦。
ASIN 返回以弧度表示的角度值,该角度值的正弦为给定的 float 表达式;亦称反正弦
ATAN 返回以弧度表示的角度值,该角度值的正切为给定的 float 表达式;亦称反正切
ATN2 返回以弧度表示的角度值,该角度值的正切介于两个给定的 float 表达式之间;亦称反正切
CEILING 返回大于或等于所给数字表达式的最小整数
COS 一个数学函数,返回给定表达式中给定角度(以弧度为单位)的三角余弦值
COT 一个数学函数,返回给定 float 表达式中指定角度(以弧度为单位)的三角余切值
DEGREES 当给出以弧度为单位的角度时,返回相应的以度数为单位的角度
EXP 返回所给的 float 表达式的指数值
FLOOR 返回小于或等于所给数字表达式的最大整数
LOG 返回给定 float 表达式的自然对数
LOG10 返回给定 float 表达式的以 10 为底的对数
PI 返回 PI 的常量值
POWER 返回给定表达式乘指定次方的值
RADIANS 对于在数字表达式中输入的度数值返回弧度值
RAND 返回 0 到1 之间的随机float 值
ROUND 返回数字表达式并四舍五入为指定的长度或精度
SIGN 返回给定表达式的正 (+1)、零 (0) 或负 (-1) 号
SIN 以近似数字 (float) 表达式返回给定角度(以弧度为单位)的三角正弦值
SQUARE 返回给定表达式的平方
SQRT 返回给定表达式的平方根
TAN 返回输入表达式的正切值
三.日期函数
DATEADD 在向指定日期加上一段时间的基础上,返回新的 datetime 值。
DATEDIFF 返回跨两个指定日期的日期和时间边界数
DATENAME 返回代表指定日期的指定日期部分的字符串
DATEPART 返回代表指定日期的指定日期部分的整数
DAY 返回代表指定日期的天的日期部分的整数
GETDATE 按 datetime 值的 Microsoft�0�3 SQL Server�6�4 标准内部格式返回当前系统日期和时间
GETUTCDATE 返回表示当前 UTC 时间(世界时间坐标或格林尼治标准时间)的 datetime 值
MONTH 返回代表指定日期月份的整数
YEAR 返回表示指定日期中的年份的整数
四.系统函数
APP_NAME 返回当前会话的应用程序名称(如果应用程序进行了设置)。
CASE 表达式 计算条件列表并返回多个可能结果表达式之一(详见PPT资料)
CAST 和 CONVERT 将某种数据类型的表达式显式转换为另一种数据类型(详见PPT资料)
COALESCE 返回其参数中第一个非空表达式
COLLATIONPROPERTY 返回给定排序规则的属性
CURRENT_TIMESTAMP 返回当前的日期和时间。等价于 GETDATE()
CURRENT_USER 返回当前的用户。价于 USER_NAME()

‘贰’ SQL注入步骤和常用函数以及中文处理方法

第一节 SQL注入的一般步骤 首先 判断环境 寻找注入点 判断数据库类型 这在入门篇已经讲过了 其次 根据注入参数类型 在脑海中重构SQL语句的原貌 按参数类型主要分为下面三种 (A)ID= 这类注入的参数是数字型 SQL语句原貌大致如下 Select * from 表名 where 字段= 注入的参数为ID= And [查询条件] 即是生成语句 Select * from 表名 where 字段= And [查询条件](B) Class=连续剧 这类注入的参数是字符型 SQL语句原貌大致概如下 Select * from 表名 where 字段= 连续剧 注入的参数为Class=连续剧 and [查询条件] and = 即是生成语句 Select * from 表名 where 字段= 连续剧 and [查询条件] and = (C) 搜索时没过滤参数的 如keyword=关键字 SQL语句原貌大致如下 Select * from 表名 where 字段like %关键字% 注入的参数为keyword= and [查询条件] and % = 即是生成语句 Select * from 表名 where字段like % and [查询条件] and % = % 接着 将查询条件替换成SQL语句 猜解表名 例如 ID= And (Select Count(*) from Admin)>= 如果页面就与ID= 的相同 说明附加条件成立 即表Admin存在 反之 即不存在(请牢记这种方法) 如此循环 直至猜到表名为止 表名猜出来后 将Count(*)替换成Count(字段名) 用同样的原理猜解字段名 有人会说 这里有一些偶然的成分 如果表名起得很复杂没规律的 那根本就没得玩下去了 说得很对 这世界根本就不存在 %成功的黑客技术 苍蝇不叮无缝的蛋 无论多技术多高深的黑客 都是因为别人的程序写得不严密或使用者保密意识不够 才有得下手 有点跑题了 话说回来 对于SQLServer的库 还是有办法让程序告诉我们表名及字段名的 我们在高级篇中会做介绍 最后 在表名和列名猜解成功后 再使用SQL语句 得出字段的值 下面介绍一种最常用的方法-Ascii逐字解码法 虽然这种方法速度很慢 但肯定是可行的方法 我们举个例子 已知表Admin中存在username字段 首先 我们取第一条记录 测试长度 ?id= and (select top len(username) from Admin)> 先说明原理 如果top 的username长度大于 则条件成立 接着就是> > > 这样测试下去 一直到条件不成立为止 比如> 成立 > 不成立 就是len(username)= 当然没人会笨得从 一个个测试 怎么样才比较快就看各自发挥了 在得到username的长度后 用mid(username N )截取第N位字符 再asc(mid(username N ))得到ASCII码 比如 id= and (select top asc(mid(username )) from Admin)> 同样也是用逐步缩小范围的方法得到第 位字符的ASCII码 注意的是英文和数字的ASCII码在 之间 可以用折半法加速猜解 如果写成程序测试 效率会有极大的提高 第二节 SQL注入常用函数 有SQL语言基础的人 在SQL注入的时候成功率比不熟悉的人高很多 我们有必要提高一下自己的SQL水平 特别是一些常用的函数及命令 Access asc(字符)SQLServer unicode(字符)作用 返回某字符的ASCII码Access chr(数字)SQLServer nchar(数字)作用 与asc相反 根据ASCII码返回字符Access mid(字符串 N L)SQLServer substring(字符串 N L)作用 返回字符串从N个字符起长度为L的子字符串 即N到N+L之间的字符串Access abc(数字)SQLServer abc (数字)作用 返回数字的绝对值(在猜解汉字的时候会用到)Access A beeen B And CSQLServer A beeen B And C作用 判断A是否界于B与C之间 第三节 中文处理方法 在注入中碰到中文字符是常有的事 有些人一碰到中文字符就想打退堂鼓了 其实只要对中文的编码有所了解 中文恐惧症 很快可以克服 先说一点常识 Access中 中文的ASCII码可能会出现负数 取出该负数后用abs()取绝对值 汉字字符不变 SQLServer中 中文的ASCII为正数 但由于是UNICODE的双位编码 不能用函数ascii()取得ASCII码 必须用函数unicode ()返回unicode值 再用nchar函数取得对应的中文字符 了解了上面的两点后 是不是觉得中文猜解其实也跟英文差不多呢?除了使用的函数要注意 猜解范围大一点外 方法是没什么两样的 lishixin/Article/program/SQLServer/201311/22039

‘叁’ SQL语句整理——函数篇

函数是大牛封装好的程序,一些函数经过时间的沉淀和不断地被开发运用,变得十分的精巧和实用。
函数让人不再纠结于底层的逻辑,就像‘遥控器’或者说类似于数学中的抽象概念一样,在数学中运用定理,很多时候不需要一步步推导出定理(当然能推导的都是大牛。),我们在学习过程中,很多时候也不用纠结‘如果不懂底层的逻辑成为不了高手’这样到处可见的言论,只管做,体会就行了,当有需要的时候,自然会了解底层的东西,顺其自然就行(自勉哈哈)。

聚合函数就是常见的汇总函数:SUM 求和,AVG平均(相当于average),MAX最大,MIN最小,COUNT平均等。

打开EXCEL数据→现有连接

点击recent

相当于if函数,最多能嵌套14层。
IIF(条件,true,false)

给语文成绩大于90的人发小红花

它是一个取整函数。

根据第一参数的结果,在后面参数对应位置给出结果。
如果表达式结果有小数则取整。
在实际运用中choose函数还是比较小众的。

下面的例子有些意思,统计生肖的人数。需要做到数据透视表中。

left 从左到右提取字符
right 从右向左提取字符

语法结构 mid(字符串,提取的起始位置,提取的长度)

根据身份证号判断性别

身份证号有的是15位有的是18位,是15位的最后一位代表性别,18位的第十七位代表性别。那么取出第15位到第17位的数字求余,就能满足条件。

字符串长度提取。

INSTR函数与工作表函数FIND类似,只是参数位置略有区别:
INSTR([查找的起始位置](可省略),查找区域,查找关键字)
FIND(查找的关键字,查找的区域,查找的起始位置(可省略))

我们想要把市名提取出来

REPLACE(查找的区域,查找的内容,替换内容)
相当于在工作表中按CTRL+F替换的功能。

拆分出生年月日

我们可以用group by 和聚合函数进行各种汇总,但是想对汇总结果进行进一步的条件筛选,这时就用到having语句,having语句与where条件语句基本类似,不过它是针对group by汇总后的进行的条件筛选。

需要筛选汇总出农作物总产量大于10000数据。

‘肆’ 所有的sql聚合函数的应用例题 谢谢

1、数值型常用函数函数返回值样例显示

ceil(n) 大于或等于数值n的最小整数select ceil(10.6) from al; 11

floor(n) 小于等于数值n的最大整数 select ceil(10.6) from al; 10

mod(m,n) m除以n的余数,若n=0,则返回m select mod(7,5) from al; 2

power(m,n) m的n次方 select power(3,2) from al; 9

round(n,m) 将n四舍五入,保留小数点后m位select round(1234.5678,2) from al; 1234.57

sign(n) 若n=0,则返回0,否则,n>0,则返回1,n<0,则返回-1 select sign(12) from al; 1

sqrt(n) n的平方根select sqrt(25) from al ; 5

2、常用字符函数

initcap(char) 把每个字符串的第一个字符换成大写select initicap('mr.ecop') from al; Mr.Ecop

lower(char) 整个字符串换成小写select lower('MR.ecop') from al; mr.ecop

replace(char,str1,str2) 字符串中所有str1换成str2 select replace('Scott','s','Boy') from al; Boycott

substr(char,m,n) 取出从m字符开始的n个字符的子串select substr('ABCDEF',2,2) from al; CD

length(char) 求字符串的长度select length('ACD') from al; 3

|| 并置运算符 select 'ABCD'||'EFGH' from al; ABCDEFGH

3、日期型函数

sysdate 当前日期和时间 select sysdate from al;

last_day 本月最后一天 select last_day(sysdate) from al;

add_months(d,n)当前日期d后推n个月 select add_months(sysdate,2) from al;

months_between(d,n) 日期d和n相差月数 select months_between(sysdate,to_date('20020812','YYYYMMDD')) from al;

next_day(d,day) d后第一周指定day的日期 select next_day(sysdate,'Monday') from al;

day 格式有'Monday' 星期一'Tuesday' 星期二

'wednesday' 星期三 'Thursday' 星期四 'Friday' 星期五

'Saturday' 星期六 'Sunday' 星期日

4、特殊格式的日期型函数

Y或YY或YYY 年的最后一位,两位,三位 select to_char(sysdate,'YYY') from al;

Q 季度,1-3月为第一季度select to_char(sysdate,'Q') from al;

MM 月份数select to_char(sysdate,'MM') from al;

RM 月份的罗马表示 select to_char(sysdate,'RM') from al; IV

month 用9个字符表示的月份名 select to_char(sysdate,'month') from al;

ww 当年第几周select to_char(sysdate,'ww') from al;

w 本月第几周select to_char(sysdate,'w') from al;

DDD 当年第几天,一月一日为001 ,二月一日032 select to_char(sysdate,'DDD') from al;

DD 当月第几天 select to_char(sysdate,'DD') from al;

D 周内第几天 select to_char(sysdate,'D') from al; 如sunday

DY 周内第几天缩写select to_char(sysdate,'DY') from al; 如sun

hh12 12小时制小时数select to_char(sysdate,'hh12') from al;

hh24 24小时制小时数select to_char(sysdate,'hh24') from al;

Mi 分钟数 select to_char(sysdate,'Mi') from al;

ss 秒数 select to_char(sysdate,'ss') from al;

select to_char(sysdate,'YYYY-MM-DD HH:24:mi:ss') from a;to_number() 将合法的数字字符串 select to_number('88877') from al; 88877

to_char() 将数字转换为字符串 select to_char(88877) from al; '88877'set serveroupt on;

dbms_output.put_line('hello world')set heading off 由于正在创建数据文件,不需要表头

set pagesize 0 不需要分页

set linesize 80 设置行的最大尺寸

set echo off 告诉sql plus 在执行语句时,不要回显语句

set feedback off 禁止sql plus 显示有多少满足查询的行被检索到

col sales format 999,999,999

append 添加文本到当前行尾

change/old/new/ 在当前行用新的文本代替旧的文本

change/text 从当前行删除wenb

del 删除当前行

input text 在当前行之后添加一行

list 显示缓冲区中的所有行

list n 显示缓冲区中的第n行

list m n 显示m到n

5、字符函数

--------------------------------------------------------------------------------

字符函数主要用于修改字符列。这些函数接受字符输入,返回字符或数字值。Oracle 提供的一些字符函数如下。

1. CONCAT (char1, char2)

返回连接“char2”的“char1”。

示例 SELECT CONCAT( CONCAT(ename, ' is a '), job) FROM emp;

2. INITCAP(string)

将“string”的字符转成大写。

示例 Select INITCAP(ename) from emp;

3. LOWER (string)

将“string”转成小写。

示例 Select LOWER(ENAME) from emp;

4. LPAD(char1,n [,char2])

返回“char1”,左起由“char2”中的字符补充到“n”个字符长。如果“char1”比“n”长,则函数返回“char1”的前“n”个字符。

示例 SELECT LPAD(ename,15,'*') FROM emp;

5. LTRIM(string,trim_set)

从左边删除字符,此处“string”是数据库的列,或者是字面字符串,而“trim_set” 是我们要去掉的字符的集合。

示例 SELECT LTRIM('abcdab','a') FROM DUAL;

6. REPLACE(string, if, then)

用 0 或其他字符代替字符串中的字符。“if”是字符或字符串,对于每个出现在“string”中的“if”,都用“then”的内容代替。

示例 SELECT REPLACE('JACK and JUE','J','BL') FROM DUAL;

7. RPAD(char1, n [,char2])

返回“char1”,右侧用“char2”中的字符补充到“n”个字符长。如果 “char1”比“n” 长,则函数返回“char1”的前“n”个字符。

示例 SELECT RPAD(ename,15,'*') FROM emp;

8. RTRIM(string,trim_set)

从右侧删除字符,此处“string”是数据库的列,或者是字面字符串,而“trim_set” 是我们要去掉的字符的集合。

示例 SELECT RTRIM('abcdef', 'f') FROM DUAL;

9. SOUNDEX(char)

返回包含“char”的表意字符的字符串。它允许比较英语中拼写不同而发音类似的字。

示例 SELECT ename FROM emp

WHERE SOUNDEX(ename) = SoUNDEX('SMYTHE');

10. SUBSTR(string, start [,count])

返回“string”中截取的一部分。该命令截取“string”的一个子集,从“start”位置开始,持续“count”个字符。如果我们不指定“count”,则从“start”开始截取到“string”的尾部。

示例 SELECT SUBSTR('ABCDEFGIJKLM',3,4) FROM DUAL;

11. TRANSLATE(string, if, then)

“if”中字符的位置,并检查“then”的相同位置,然后用该位置的字符替换 “string”中的字符。

示例 SELECT TRANSLATE(ename,'AEIOU', 'XXXXX') FROM emp;

12. UPPER(string)

返回大写的“string”。

示例 SELECT UPPER('aptech computer ecation') FROM al;

13. ASCII(string)

该命令是“American Standard Code for Information Interchange”的缩写。它是使用数字表示可打印字符的基本规则。该函数返回 “string”中第一个(最左边)字符的 ASCII 值。

示例 SELECT ASCII('APTECH') from al;

14. INSTR (string, set[, start[, occurrence] ] )

该命令“string”中从“start”位置开始查找字符集合的位置,再查找“set”出现的第一次、第二次等等的“occurrence”(次数)。“start”的值也可以是负数,代表从字符串结尾开始向反方向搜索。该函数也用于数字和日期数据类型。

示例 SELECT INSTR('aptech is aptech','ap',1,2) FROM DUAL;

15. LENGTH(string)

返回“string”的长度值。

示例 SELECT ename, LENGTH(ename) FROM emp

WHERE empno = 7698;

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lihan6415151528/archive/2009/08/06/4417974.aspx

‘伍’ 如何用sql语言编写一个简单的倒计时程序,练习使用系统函数

sql 能写倒计时函数吗?这个真没遇到过,sql只是一个结构化查询语言,用于数据库,要完成倒计时功能,语言里必须支持计时器,sql 里有计时器吗?要完成计时器功能,可以试试 c, c++, java 等中高级语言