當前位置:首頁 » 數據倉庫 » 資料庫ceiling
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

資料庫ceiling

發布時間: 2022-08-12 08:17:59

資料庫常用函數

1、系統信息函數

系統信息函數用來查詢Mysql資料庫的系統信息。

函數代碼:

SELECT VERSION()

->5.0.67-community-nt

CONNECTION_ID() 返回伺服器的連接數

DATABASE()、SCHEMA 返回當前資料庫名

USER()、SYSTEM_USER()返回當前用戶

2、日期時間函數

MySQL的日期和時間函數主要用於處理日期時間。

函數代碼:

CURDATE(),CURRENT_DATE() curdate() 返回當前日期

SELECT CURDATE()

->2014-12-17

CURTIME(),CURRENT_TIME curtime()
返回當前時間

SELECT CURTIME()
->15:59:02

3、字元串函數

函數代碼:

CHAR_LENGTH(s) char_length()返回字元串s的字元數

SELECT CHAR_LENGTH('你好123') -- 5

CONCAT(s1,s2,...) concat(s1,s2...)

將字元串s1,s2等多個字元串合並為一個字元串

4、加密函數

加密函數是MySQL用來對數據進行加密的函數。

函數代碼:

PASSWORD(str)

該函數可以對字元串str進行加密,一般情況下,PASSWORD(str)用於給用戶的密碼加密。

SELECT PASSWORD('123')

->*

5、數學函數

數學函數主要用於處理數字,包括整型、浮點數等。

函數代碼:

ABS(x) abs(x)返回x的絕對值

SELECT ABS(-1) -- 返回1

CEIL(x),CEILING(x) cell(x),celling(x)

返回大於或等於x的最小整數

SELECT CEIL(1.5) -- 返回2

② 所有的資料庫函數的函數名都以什麼開頭

這個是好多的具體如下:
一、財務函數
ACCRINT 返回定期付息有價證券的應計利息
ACCRINTM 返回到期一次性付息有價證券的應計利息
AMORDEGRC 返回使用折舊系數的每個結算期間的折舊值
AMORLINC 返回每個結算期間的折舊值
COUPDAYBS 返回當前付息期內截止到成交日的天數
COUPDAYS 返回包含成交日所在的付息期的天數
COUPDAYSNC 返回從成交日到下一付息日之間的天數
COUPNCD 返回成交日之後的下一個付息日
COUPNUM 返回成交日和到期日之間的付息次數
COUPPCD 返回成交日之前的前一個的付息日
CUMIPMT 返回兩個期間內累計支付的利息
CUMPRINC 返回一筆貸款在兩個期間內累計償還的本金數額
DB 使用固定余額遞減法,返回一筆資產在給定期間內的折舊值
DDB 使用雙倍余額遞減法或其他指定方法,返回一筆資產在給定期間內的折舊值
DISC 返回有價證券的貼現率
DOLLARDE 將按分數表示的價格轉換為按小數表示的價格
DOLLARFR 將按小數表示的價格轉換為按分數表示的價格
DURATION 返回定期付息有價證券的每年期限
EFFECT 返回實際年利率
FV 返回一筆投資的未來值
FVSCHEDULE 返回應用一系列復利率後的本金的未來值
INTRATE 返回一次性付息有價證券的利率
IPMT 返回一筆投資在給定期間內支付的利息
IRR 返回一系列現金流的內部收益率
ISPMT 計算特定投資期內要支付的利息
MDURATION 返回假設面值 $100 的有價證券的 Macauley 修正期限
MIRR 返回正和負現金流以不同利率進行計算的內部收益率
NOMINAL 返回年名義利率
NPER 返回投資期間的數量
NPV 返回基於一系列定期現金流和貼現率計算的投資的現凈值
ODDFPRICE 返回首期付息日不固定的面值$100 的有價證券價格
ODDFYIELD 返回首期付息日不固定的有價證券的收益率
ODDLPRICE 返回末期付息日不固定的面值$100 的有價證券價格
ODDLYIELD 返回末期付息日不固定的有價證券的收益率
PMT 返回年金的定期支付金額
PPMT 返回一筆投資在給定期間內償還的本金
PRICE 返回定期付息的面值 $100 的有價證券的價格
PRICEDISC 返回折價發行的面值$100 的有價證券的價格
PRICEMAT 返回到期付息的面值$100 的有價證券的價格
PV 返回投資的現值
RATE 返回年金的各期利率
RECEIVED 返回一次性付息的有價證券到期收回的金額
SLN 返回一筆資產在某個期間內的線性折舊值
SYD 返回一筆資產按年限總和折舊法計算的指定期間的折舊值
TBILLEQ 返回國庫券的等效收益率
TBILLPRICE 返回面值 $100 的國庫券的價格
TBILLYIELD 返回國庫券的收益率
VDB 使用余額遞減法,返回一筆資產在給定期間或部分期間內的折舊值
XIRR 返回一組不定期發生的現金流的內部收益率
XNPV 返回一組不定期發生的現金流的凈現值
YIELD 返回定期付息有價證券的收益率
YIELDDISC 返回折價發行的有價證券(如國庫券)的年收益率
YIELDMAT 返回到期付息的有價證券的年收益率

二、日期與時間函數
DATE 返回特定日期的序列號
DATEVALUE 將文本格式的日期轉換為序列號
DAY 將序列號轉換為月的日期
DAYS360 計算基於一年 360 天的兩個日期間的天數
EDATE 返回用於表示開始日期之前或之後月數的日期的序列號
EOMONTH 返回指定個數月之前或之後的月的末日的序列號
HOUR 將序列號轉換為小時
MINUTE 將序列號轉換為分鍾
MONTH 將序列號轉換為月
NETWORKDAYS 返回兩個日期之間的所有工作日個數
NOW 返回當前日期和時間的序列號
SECOND 將序列號轉換為秒
TIME 返回特定時間的序列號
TIMEVALUE 將文本格式的時間轉換為序列號
TODAY 返回今天日期的序列號
WEEKDAY 將序列號轉換為一星期的某天
WEEKNUM 將序列號轉換為代表該星期為一年中的第幾周的數字
WORKDAY 返回指定個數工作日之前或之後日期的序列號
YEAR 將序列號轉換為年
YEARFRAC 返回代表start_date 和 end_date 之間的天數的年分數

三、數學和三角函數
ABS 返回數字的絕對值
ACOS 返回數字的反餘弦值
ACOSH 返回數字的反雙曲餘弦值
ASIN 返回數字的反正弦值
ASINH 返回數字的反雙曲正弦值
ATAN 返回數字的反正切值
ATAN2 返回 X 和 Y 坐標的反正切值
ATANH 返回數字的反雙曲正切值
CEILING 將數字舍入為最接近的整數或最接近的 Significance 的倍數
COMBIN 返回給定數目對象的組合數
COS 返回數字的餘弦
COSH 返回數字的雙曲餘弦值
DEGREES 將弧度轉換為度
EVEN 將數字向上舍入為最接近的偶數
EXP 返回 e 的給定數字次冪
FACT 返回數字的階乘
FACTDOUBLE 返回數字的雙倍階乘
FLOOR 向絕對值減小的方向舍入數字
GCD 返回最大公約數
INT 將數字向下舍入到最接近的整數
LCM 返回最小公倍數
LN 返回數字的自然對數
LOG 按所指定的底數,返回數字的對數
LOG10 返回數字的以 10 為底的對數
MDETERM 返回數組的矩陣行列式的值
MINVERSE 返回數組的逆矩陣
MMULT 返回兩個數組的矩陣乘積
MOD 返回除法的余數
MROUND 返回舍入到指定倍數的數值
MULTINOMIAL 返回一組數字的多項式
ODD 將數字向上舍入為最接近的奇數
PI 返回 pi 的值
POWER 返回給定數字次冪的結果
PRODUCT 將其參數相乘
QUOTIENT 返回除法的整數部分
RADIANS 將角度轉換為弧度
RAND 返回 0 和 1 之間的一個隨機數
RANDBETWEEN 返回指定數字間的隨機數
ROMAN 將阿拉伯數字轉換為文本形式的羅馬數字
ROUND 將數字按指定位數舍入
ROUNDDOWN 向絕對值減小的方向舍入數字
ROUNDUP 向絕對值增大的方向舍入數字
SERIESSUM 返回基於以下公式的冪級數之和
SIGN 返回數字的符號
SIN 返回給定角度的正弦值
SINH 返回數字的雙曲正弦值
SQRT 返回正平方根
SQRTPI 返回某數與 pi 的乘積的平方根
SUBTOTAL 返回列表或資料庫中的分類匯總
SUM 將其參數相加
SUMIF 按給定條件對若干單元格求和
SUMPRODUCT 返回對應的數組元素的乘積和
SUMSQ 返回參數的平方和
SUMX2MY2 返回兩個數組中對應值的平方差之和
SUMX2PY2 返回兩個數組中對應值的平方和之和
SUMXMY2 返回兩數組中對應值的平方差的之和
TAN 返回數字的正切
TANH 返回數字的雙曲正切值
TRUNC 將數字截尾取整

四、統計函數
AVEDEV 返回數據點與它們的平均值的絕對偏差平均值
AVERAGE 返回其參數的平均值
AVERAGEA 返回其參數的平均值,包括數字、文本和邏輯值
BETADIST 返回 Beta 累積分布函數
BETAINV 返回指定 Beta 分布的累積分布函數的反函數
BINOMDIST 返回一元二項式分布的概率值
CHIDIST 返回γ2 分布的單尾概率
CHIINV 返回γ2 分布的單尾概率的反函數
CHITEST 返回獨立性檢驗值
CONFIDENCE 返回總體平均值的置信區間
CORREL 返回兩個數據集之間的相關系數
COUNT 計算參數列表中的數字個數
COUNTA 計算參數列表中的數值個數
COUNTBLANK 計算區間內的空白單元格個數
COUNTIF 計算滿足給定條件的區間內的非空單元格個數
COVAR 返回協方差,成對偏差乘積的平均值
CRITBINOM 返回使累積二項式分布小於或等於臨界值的最小值
DEVSQ 返回偏差的平方和
EXPONDIST 返回指數分布
FDIST 返回 F 概率分布
FINV 返回 F 概率分布的反函數值
FISHER 返回 Fisher 變換
FISHERINV 返回 Fisher 變換的反函數值
FORECAST 返回沿線性趨勢的值
FREQUENCY 以垂直數組的形式返回頻率分布
FTEST 返回 F 檢驗的結果
GAMMADIST 返回伽瑪分布
GAMMAINV 返回伽瑪累積分布函數的反函數
GAMMALN 返回伽瑪函數的自然對數,Γ(x)
GEOMEAN 返回幾何平均值
GROWTH 返回沿指數趨勢的值
HARMEAN 返回調和平均值
HYPGEOMDIST 返回超幾何分布
INTERCEPT 返回線性回歸線的截距
KURT 返回數據集的峰值
LARGE 返回數據集中第 k 個最大值
LINEST 返回線性趨勢的參數
LOGEST 返回指數趨勢的參數
LOGINV 返回對數分布函數的反函數
LOGNORMDIST 返回對數累積分布函數
MAX 返回參數列表中的最大值
MAXA 返回參數列表中的最大值,包括數字、文本和邏輯值
MEDIAN 返回給定數值集合的中值
MIN 返回參數列表中的最小值
MINA 返回參數列表中的最小值,包括數字、文本和邏輯值
MODE 返回在數據集中出現次數最多的值
NEGBINOMDIST 返回負二項式分布
NORMDIST 返回正態累積分布
NORMINV 返回正態累積分布的反函數
NORMSDIST 返回標准正態累積分布
NORMSINV 返回標准正態累積分布的反函數
PEARSON 返回 Pearson 乘積矩相關系數
PERCENTILE 返回區域中數值的第 K 個百分點的值
PERCENTRANK 返回數據集中的值的百分比排位
PERMUT 返回給定數目對象的排列數量
POISSON 返回泊松分布
PROB 返回區域中的數值落在指定區間內的概率
QUARTILE 返回數據集的四分位數
RANK 返回一列數字的數字排位
RSQ 返回 Pearson 乘積矩相關系數的平方
SKEW 返回分布的偏斜度
SLOPE 返回線性回歸線的斜率
SMALL 返回數據集中第 K 個最小值
STANDARDIZE 返回正態化數值
STDEV 估算基於給定樣本的標准偏差
STDEVA 估算基於給定樣本(包括數字、文本和邏輯值)的標准偏差
STDEVP 計算基於給定的樣本總體的標准偏差
STDEVPA 計算基於總體(包括數字、文本和邏輯值)的標准偏差
STEYX 返回通過線性回歸法計算每個 x 的 y 預測值時所產生的標准誤差
TDIST 返回學生的 t 分布
TINV 返回學生的 t 分布的反函數
TREND 返回沿線性趨勢的值
TRIMMEAN 返回數據集的內部平均值
TTEST 返回與學生的 t 檢驗相關的概率
VAR 估算基於樣本的方差
VARA 估算基於樣本(包括數字、文本和邏輯值)的方差
VARP 計算基於樣本總體的方差
VARPA 計算基於樣本總體(包括數字、文本和邏輯值)的方差
WEIBULL 返回韋伯分布
ZTEST 返回 z 檢驗的單尾概率值

五、查找和引用函數
ADDRESS 以文本形式將引用值返回工作表的單個單元格
AREAS 返回引用值中包含的區域個數
CHOOSE 從一列值中選擇值
COLUMN 返回引用的列個數
COLUMNS 返回引用中包含的列個數
HLOOKUP 查找數組的首行,並返回特定單元格的值
HYPERLINK 創建一個快捷方式或跳轉,用以打開存儲在網路伺服器、Intranet 或 Internet 中的文件
INDEX 使用索引從引用或數組選擇值
INDIRECT 返回由文本值指定的引用
LOOKUP 在向量或數組中查找值
MATCH 在引用值或數組中查找值
OFFSET 從給定引用值返回引用偏移量
ROW 返回引用的行個數
ROWS 返回引用中包含的行個數
RTD 從支持 COM 自動化(自動化:從其他應用程序或開發工具使用應用程序的對象的方法。以前稱為「OLE 自動化」,自動化是一種工業標准和組件對象模型 (COM) 功能。)的程序中返回實時數據
TRANSPOSE 返回數組的轉置
VLOOKUP 查找數組首列,移動到行並返回單元格的值

六、資料庫工作表函數
Microsoft Excel 中包含了一些工作表函數,用於對存儲在列表或資料庫中的數據進行分析,這些函數統稱為 Dfunctions,每個函數均有三個參數:database、field 和 criteria。這些參數指向函數所使用的工作表區域。
DAVERAGE 返回選擇的資料庫條目的平均值
DCOUNT 計算資料庫中包含數字的單元格個數
DCOUNTA 計算資料庫中的非空單元格
DGET 從資料庫提取符合指定條件的單個記錄
DMAX 返回選擇的資料庫條目的最大值
DMIN 返回選擇的資料庫條目的最小值
DPRODUCT 將資料庫中符合條件的記錄的特定欄位中的值相乘
DSTDEV 基於選擇的資料庫條目的樣本估算標准偏差
DSTDEVP 基於選擇的資料庫條目的總體計算標准偏差
DSUM 將資料庫中符合條件的記錄的欄位列中的數字相加
DVAR 基於選擇的資料庫條目的樣本估算方差
DVARP 基於選擇的資料庫條目的樣本總體計算方差
GETPIVOTDATA 返回存儲在數據透視表中的數據

七、文本和數據函數
ASC 將字元串中的全形(雙位元組)英文字母或片假名更改為半形(單位元組)字元
BAHTTEXT 使用 ß(泰銖)貨幣格式將數字轉換成文本
CHAR 返回代碼數字所對應的字元
CLEAN 刪除文本中不可列印的字元
CODE 返迴文本字元串中第一個字元的數字代碼
CONCATENATE 將幾個文本項合並為一個文本項
DOLLAR 使用 $(美元)貨幣格式將數字轉換成文本
EXACT 檢查兩個文本值是否相同
FIND 在一個文本值中查找另一個文本值(區分大小寫)
FIXED 將數字格式設置為具有固定小數位數
JIS 將字元串中的半形(單位元組)英文字母或片假名更改為全形(雙位元組)字元
LEFT 返迴文本值中最左邊的字元
LEN 返迴文本字元串中的字元個數
LOWER 將文本轉換為小寫
MID 在文本字元串中,從您所指定的位置開始返回指定數量的字元
PHONETIC 提取文本字元串中的拼音(furigana) 字元
PROPER 將文本值的每個字的首字母大寫
REPLACE 替換文本中的字元
REPT 按照給定的次數重復顯示文本
RIGHT 返迴文本值中最右邊的字元
SEARCH 在一個文本值中查找另一個文本值(不區分大小寫)
SUBSTITUTE 在文本字元串中用新文本替換舊文本
T 將其參數轉換為文本
TEXT 設置數字格式並將其轉換為文本
TRIM 從文本刪除空格
UPPER 將文本轉換成大寫形式
VALUE 將文本參數轉換為數字

八、邏輯運算符
AND 如果其所有參數為 TRUE,則返回 TRUE
FALSE 返回邏輯值 FALSE
IF 指定要執行的邏輯檢驗
NOT 對其參數的邏輯求反
OR 如果所有參數為 TRUE,則返回 TRUE
TRUE 返回邏輯值 TRUE

九、信息函數
CELL 返回單元格的格式、位置或內容等信息
ERROR.TYPE 返回相應錯誤類型的個數
INFO 返回有關當前操作環境的信息
ISBLANK 如果值為空,則返回 TRUE
ISERR 如果值為除 #N/A 以外的任何錯誤值,則返回TRUE
ISERROR 如果值為任何錯誤值,則返回 TRUE
ISEVEN 如果數字為偶數,則返回 TRUE
ISLOGICAL 如果值為邏輯值,則返回TRUE
ISNA 如果值為 #N/A 錯誤值,則返回 TRUE
ISNONTEXT 如果值不為文本,則返回TRUE
ISNUMBER 如果值為數字,則返回TRUE
ISODD 如果數字為奇數,則返回 TRUE
ISREF 如果值為引用值,則返回 TRUE
ISTEXT 如果值為文本,則返回 TRUE
N 返回轉換為數字的值
NA 返回錯誤值 #N/A
TYPE 返回表示值的數據類型的數字

十、工程函數
BESSELI 返回已修改的 Bessel 函數 In(x)
BESSELJ 返回 Bessel 函數 Jn(x)
BESSELK 返回已修改的 Bessel 函數 Kn(x)
BESSELY 返回 Bessel 函數 Yn(x)
BIN2DEC 將二進制數轉換為十進制數
BIN2HEX 將二進制數轉換為十六進制數
BIN2OCT 將二進制數轉換為八進制數
COMPLEX 將實系數和虛系數轉換為復數
CONVERT 將數字從一個度量系統轉換為另一個度量系統
DEC2BIN 將十進制數轉換為二進制數
DEC2HEX 將十進制數轉換為十六進制數
DEC2OCT 將十進制數轉換為八進制數
DELTA 檢驗是否兩個值相等
ERF 返回錯誤函數
ERFC 返回互補錯誤函數
GESTEP 檢驗數字是否大於閾值
HEX2BIN 將十六進制數轉換為二進制數
HEX2DEC 將十六進制數轉換為十進制數
HEX2OCT 將十六進制數轉換為八進制數
IMABS 返回復數的的絕對值(模數)
IMAGINARY 返回復數的虛系數
IMARGUMENT 返回參數 theta,即以弧度表示的角
IMCONJUGATE 返回復數的共軛復數
IMCOS 返回復數的餘弦
IMDIV 返回兩個復數的商
IMEXP 返回復數的指數
IMLN 返回復數的自然對數
IMLOG10 返回復數的以 10 為底的對數
IMLOG2 返回復數的以 2 為底的對數
IMPOWER 返回整數次冪的復數
IMPRODUCT 返回兩個復數的積
IMREAL 返回復數的實系數
IMSIN 返回復數的正弦
IMSQRT 返回復數的平方根
IMSUB 返回兩個復數的差
IMSUM 返回多個復數的和
OCT2BIN 將八進制數轉換為二進制數
OCT2DEC 將八進制數轉換為十進制數
OCT2HEX 將八進制數轉換為十六進制數

③ SQL產生隨機數

下文將為您介紹SQL中的隨機函數rand(),供您參考,如果您是才接觸SQL Server的新手,不妨一看,相信對您學習SQL中的函數會大有幫助。
在SQL Server中,有個隨機函數rand(),有不少新手可能不知道存在這個函數,現在我就把這個函數的一些隨機數生成技巧寫出來,這是面向菜鳥的,老鳥請不要拍磚呀,我的頭還不夠硬
不過還是希望老鳥們多多指教了,現在切入正題:
隨機函數:rand()
在查詢分析器中執行:select rand(),可以看到結果會是類似於這樣的隨機小數:0.36361513486289558,
像這樣的小數在實際應用中用得不多,一般要取隨機數都會取隨機整數。那就看下面的兩種隨機取整數的方法:
1、
A:
select floor(rand()*N) ---生成的數是這樣的:12.0
B:
select cast( floor(rand()*N) as int) ---生成的數是這樣的:12
2、
A:select ceiling(rand() * N) ---生成的數是這樣的:12.0
B:select cast(ceiling(rand() * N) as int) ---生成的數是這樣的:12
其中裡面的N是一個你指定的整數,如100,可以看出,兩種方法的A方法是帶有.0這個的小數的,而B方法就是真正的整數了。
大致一看,這兩種方法沒什麼區別,真的沒區別?其實是有一點的,那就是他們的生成隨機數的范圍:
方法1的數字范圍:0至N-1之間,如cast( floor(rand()*100) as int)就會生成0至99之間任一整數
方法2的數字范圍:1至N之間,如cast(ceiling(rand() * 100) as int)就會生成1至100之間任一整數
對於這個區別,看SQL的聯機幫助就知了:
------------------------------------------------------------------------------------
比較 CEILING 和 FLOOR
CEILING 函數返回大於或等於所給數字表達式的最小整數。FLOOR 函數返回小於或等於所給數字表達式的最大整數。例如,對於數字表達式 12.9273,CEILING 將返回 13,FLOOR 將返回 12。FLOOR 和 CEILING 返回值的數據類型都與輸入的數字表達式的數據類型相同。
----------------------------------------------------------------------------------
現在,各位就可以根據自己需要使用這兩種方法來取得隨機數了^_^
另外,還要提示一下各位菜鳥,關於隨機取得表中任意N條記錄的方法,很簡單,就用newid():
select top N * from table_name order by newid() ----N是一個你指定的整數,表是取得記錄的條數 。

④ 如何讓SQL server讓字元串取整!

ceiling()是向上去整

select ceiling(123.3/5)*5,ceiling(178.8/5)*5

--------------------------------------- ---------------------------------------
125 180

(1 行受影響)

⑤ 如果在資料庫中有大數據量,而我們用分頁存儲過程,怎麼樣才能效率高

--------------------------------
--關於分頁儲存的效率問題
--5個存儲過程都是採用不同的方式
--------------------------------
------------------------------------------
--利用select top 和select not in進行分頁--
------------------------------------------
create procere proc_paged_with_notin --利用select top and select not in
(
@pageIndex int, --頁索引
@pageSize int --每頁記錄數
)
as
begin
set nocount on;
declare @timediff datetime --耗時
declare @sql nvarchar(500)
select @timediff=Getdate()
set @sql='select top '+str(@pageSize)+' * from tb_TestTable where(ID not in(select top '+str(@pageSize*@pageIndex)+' id from tb_TestTable order by ID ASC)) order by ID'
execute(@sql) --因select top後不支技直接接參數,所以寫成了字元串@sql
select datediff(ms,@timediff,GetDate()) as 耗時
set nocount off;
endexec proc_paged_with_notin 10000,10
--------------------------------------
--利用select top 和 select max(列鍵)--
--------------------------------------
create procere proc_paged_with_selectMax --利用select top and select max(列)
(
@pageIndex int, --頁索引
@pageSize int --頁記錄數
)
as
begin
set nocount on;
declare @timediff datetime
declare @sql nvarchar(500)
select @timediff=Getdate()
set @sql='select top '+str(@pageSize)+' * From tb_TestTable where(ID>(select max(id) From (select top '+str(@pageSize*@pageIndex)+' id From tb_TestTable order by ID) as TempTable)) order by ID'
execute(@sql)
select datediff(ms,@timediff,GetDate()) as 耗時
set nocount off;
end--------------------------------------------------------
--利用select top和中間變數--此方法因網上有人說效果最佳--
--------------------------------------------------------
create procere proc_paged_with_Midvar --利用ID>最大ID值和中間變數
(
@pageIndex int,
@pageSize int
)
as
declare @count int
declare @ID int
declare @timediff datetime
declare @sql nvarchar(500)
begin
set nocount on;
select @count=0,@ID=0,@timediff=getdate()
select @count=@count+1,@ID=case when @count<=@pageSize*@pageIndex then ID else @ID end from tb_testTable order by id
set @sql='select top '+str(@pageSize)+' * from tb_testTable where ID>'+str(@ID)
execute(@sql)
select datediff(ms,@timediff,getdate()) as 耗時
set nocount off;
end
---------------------------------------------------------------------------------------
--利用Row_number() 此方法為SQL server 2005中新的方法,利用Row_number()給數據行加上索引--
---------------------------------------------------------------------------------------
create procere proc_paged_with_Rownumber --利用SQL 2005中的Row_number()
(
@pageIndex int,
@pageSize int
)
as
declare @timediff datetime
begin
set nocount on;
select @timediff=getdate()
select * from (select *,Row_number() over(order by ID asc) as IDRank from tb_testTable) as IDWithRowNumber where IDRank>@pageSize*@pageIndex and IDRank<@pageSize*(@pageIndex+1)
select datediff(ms,@timediff,getdate()) as 耗時
set nocount off;
end
--------------------------
--利用臨時表及Row_number--
--------------------------
create procere proc_CTE --利用臨時表及Row_number
(
@pageIndex int, --頁索引
@pageSize int --頁記錄數
)
as
set nocount on;
declare @ctestr nvarchar(400)
declare @strSql nvarchar(400)
declare @datediff datetime
begin
select @datediff=GetDate()
set @ctestr='with Table_CTE as
(select ceiling((Row_number() over(order by ID ASC))/'+str(@pageSize)+') as page_num,* from tb_TestTable)';
set @strSql=@ctestr+' select * From Table_CTE where page_num='+str(@pageIndex)
end
begin
execute sp_executesql @strSql
select datediff(ms,@datediff,GetDate())
set nocount off;
end
我們分別在每頁10條數據的情況下在第2頁,第1000頁,第10000頁,第100000頁,第199999頁進行測試,耗時單位:ms 每頁測試5次取其平均值 存過第2頁耗時第1000頁耗時第10000頁耗時第100000頁耗時第199999頁耗時效率排行1用not in0ms16ms47ms475ms953ms32用select max5ms16ms35ms325ms623ms13中間變數_number0ms0ms34ms365ms710ms24臨時表780ms796ms798ms780ms805ms4正好我正在研究這個問題 給大家分享

⑥ 怎麼用MySQL資料庫返回大於或等於12.54和-10.63456的最小整數

mysql自帶CEILING函數,是向上取整,比如
select CEILING(12.54)

返回值是13
select CEILING(-10.63456)
返回值是-10
另外,mysql提供round(四捨五入)函數,FLOOR(向下取整)函數,用法與celling類似

⑦ sql的查詢問題

select A1,A2,B1,B2,DR1,DR2 from(
select A1,A2,B1,B2,DR1,DR2,
case when A1='1' then 1 else 0 end a1,
case when A2='2' then 1 else 0 end a2,
case when B1='2' then 1 else 0 end a3,
case when B2='54' then 1 else 0 end a4,
case when DR1='32' then 1 else 0 end a5,
case when DR2='23' then 1 else 0 end a6
from 表名) tmp
where a1+a2+a3+a4+a5>=2;

************
補充:查詢條件只有三個的話把【>=2】改成【=3】即可。
************

---
以上,希望對你有所。

⑧ SQL資料庫 請高手解答一下問題 實在不會做。本人初學者

基本都是很基礎的語句,最後的區別,網上好多專門介紹這些的文章。

1. select a.userid, a.username, isnull(b.warename, '無物品') as warename
from u_user a left join u_ware b on a.userid = b.userid

2. select b.warename, isnull(a.username, '無人認領') as username
from u_user a right join u_ware b on a.userid = b.userid

3. select isnull(a.sex, '未知'), sum(b.amt) as sum_amt
from u_user a right join u_ware b on a.userid = b.userid
group by isnull(a.sex, '未知')

4. insert into u_user values ('105', '小張', '男')
重復上面三個步驟,直接使用上面三個的語句查詢。

5. 1) delete from u_ware where warename = '杯子'
2) update u_ware set warename = '組合床' where warename = '床'

6. select warename, amt * 0.1 as keep_amt
from u_ware
union all
select '合計', sum(amt * 0.1) from u_ware

7. select substring(convert(varchar(10),getdate(),120),1,4) + '年' + substring(convert(varchar(10),getdate(),120),6,2) + '月' + substring(convert(varchar(10),getdate(),120),9,2) + '日'

8. 利用rand()函數,這個函數隨機生成0到1的浮點數,那麼一周7天,乘以7,就取出1到7之間的浮點數了。如果是一周兩天,可以把一周7天分為兩部分,前4天一部分,後三天一部分,那麼這個隨機函數乘以的乘數,就分別有兩個,一個是4,一個是3.
select cast(ceiling(rand() * 4) as int) as num1, 4 + cast(ceiling(rand() * 3) as int) as num2

9. 假設某人生日是1989-12-10
select datediff(d, convert(datetime, '1989-12-10', 120), getdate())

10.
CHAR/VARCHAR:這個兩個都是字元類型,不同的是,CHAR類型是定長的,而VARCHAR類型是變長的。CHAR(10)和VARCHAR(10),這樣的欄位存儲數據,CHAR(10)的欄位,長度是固定的10,而VARCHAR(10),實際長度根據數據來確定,是10隻是規定了最長只能是10.

CHAR/NCHAR CHAR類型是按照位元組儲存,而NCHAR類型是按照字元存儲。比如對於中文,CHAR(10),最多隻能存儲5個漢字,而NCHAR(10),最多可以 存儲10個漢字。

LEN/DATALENGTH :這個看看資料庫中對二者就解釋就知道了。
LEN:返回給定字元串表達式的字元(而不是位元組)個數,其中不包含尾隨空格。
DATALENGTH :返回任何錶達式所佔用的位元組數。

表/視圖: 資料庫中的數據都是存儲在表中的,而視圖是基於表的數據創建出來的一個集合,視圖的創建來源於表和視圖,其實就是把SELECT語句查詢固化了。

觸發器/存儲過程:
觸發器是自動的:它們在對表的數據作了任何修改之後立即被激活。
存儲過程是一組為了完成特定功能的SQL語句集,經編譯後存儲在資料庫中。用戶通過指定存儲過程的名字並給出參數來執行它,存儲過程並不是自動的,需要用戶調用。

存儲過程/函數:
函數有限制只能返回一個標量,而存儲過程可以返回多個。並且函數是可以嵌入在SQL中使用的,可以在SELECT等SQL語句中調用,而存儲過程不行。

LEFT JOIN/OUT JOIN

LEFT JOIN/INNER JOIN :left join是左外連接,以連接左邊的表為主表,語句查詢的結果,主表的結果都會顯示,而右邊連接的表的數據,連接條件不成立,會補空。參照上面1,2,3的語句。
inner join,是全連接,只能查詢連接條件成立的所有數據。
UNION/UNION ALL:UNION ALL只實現兩個查詢的聯合,而UNION在UNION ALL的基礎上,會去掉重復數據。UNION的查詢效率要低。

SUM/COUNT:而者都是聚合函數,SUM的是求和,而COUNT是求符合條件的總行數
IN/EXISTS :二者好多時候可以實現相同的結果。在語句中,IN前邊應該是一個欄位,後邊要求是一個和前邊欄位或變數相同類型的數據集合,這個集合可以通過SELECT得到,而EXISTS後邊是一個SELECT語句,而這個語句的WHERE條件是傳入外部主查詢的欄位作為連接,如果連接成立,那麼就是符合條件。否則不符合條件。
比如 SELECT * FROM STUDENT WHERE ID IN (SELECT ID FROM SCORE)
等同: SELECT * FROM STUDENT WHERE EXISTS (SELECT 1 FROM SCORE WHERE SCORE.ID = STUDENT.ID)
執行時,IN如果後邊是查詢,需要執行完查詢,而EXISTS,則遇到第一個符合查詢條件的結果就會自動退出查詢,所以效率要高很多。

⑨ sql資料庫 能否重設某行 某列的值為隨機數呢

可以,各種資料庫一般的有隨機函數,你把?部分替換成隨機函數就可以了,各種資料庫不一樣
例如oracle可以寫成update tabel set moods=cast(dbms_random.value*200+1 as integer) where ID between 1 and 1000