有時SQL中不常用的函數, 關鍵詞, 判式會使查詢更簡潔, 更有效率.
1. STUFF
stuff(<string1>,<starting position>, <Length to delete from string1>, <string 2>)
2. INTERSECT
生成只包括該運算符連接的兩個結果集都有的行組成的結果集(來自結果A且在結果B中重複的).
3. EXCEPT
來自結果A且在結果B中不重複的.
4. UNION/UNION ALL/UNION CORRESPONDING
5. EXTRACT
從DateTime值中提取單個域
Extract(<dateTime field> from <datetime value>)
dateTime field: Day, year, month, hour, minute, second, timezone_hour
datetime value: 具體值, 列, 或帶有datetime類型值的表達式.
6. CURRENT_DATE/CURRENT_TIME/CURRENT_TIMESTAMP/GETDATE()
CURRENT_TIMESTAMP 等價於 GETDATE();
print current_date 等價於 print convert(varchar,getdate(), 101)
<style> | format |
(blank),0 | mmm dd yyyy hh:mmAM/PM |
1 | mm/dd/yy |
2 | yy.mm.dd |
3 | dd/mm/yy |
4 | dd.mm.yy |
5 | dd-mm-yy |
6 | dd mmm yy |
7 | mmm dd, yy |
8 | hh:mm:ss |
9 | mmm dd yyyy hh:mm:ss:sssAM/PM |
10 | mm-dd-yy |
11 | yy/dd/mm |
12 | yymmdd |
13 | dd mmm yyyy hh:mm:ss:sss |
14 | hh:mm:ss:sss |
20 | yyyy-dd-mm hh:mm:ss |
21 | yyyy-dd-mm hh:mm:ss:sss |
7. BETWEEN
<test expression> between <low expression> and <high expression>
等價於: <test expression> >= <low expression> and <test expression> <= <high expression>
比較
單說in和exsist, in的效率較差。
關於EXISTS與IN的區別:
EXISTS檢查是否有結果,判斷是否有記錄,返回的是一個布爾型(TRUE/FALSE)。
IN是對結果值進行比較,判斷一個字段是否存在於幾個值的範圍中,所以 EXISTS 比 IN 快。
主要區別是:
exists主要用於片面的,有滿足一個條件的即可,
in主要用於具體的集合操作,有多少滿足條件.
exists是判斷是否存在這樣的記錄,
in是判斷某個字段是否在指定的某個範圍內。
exists快一些。
注意有時不一定的:in適合內外表都很大的情況,exists適合外表結果集很小的情況。