當前位置:首頁 » 編程語言 » 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 等中高級語言