- 基礎設定
- DATEPART 回傳時間指定部分如:時或分或年
- DATEDIFF 回傳開始與結束之間的差
- Between .. And .. 用來篩選資料範圍
- In 指定範圍
- 當遇到NULL時處理方式
- TSQL字元符號的使用
- Except 用來比較表格與表格之間,只回傳2個表格不相同部分
- Interset 用來比較表格與表格之間,只回傳2個表格相同部分
- Tablesample 用於亂數取出資料量,如果要用於採樣工作可以試試看
學習SQL語法,最基本不畏忽視SELECT,為了日後方便,整理一下
SELECT select_list
[INTO new_table_name]
FORM table_list | view_list
[WHERE search_conditions]
[GROUP BY group_by_list]
[HAVING search_conditions]
[ORDER BY order_list [ASC | DESC]]
[]:有或無都可以
| Where DATEPART(datepart , date) |
| 條件 |
說明 |
| datepart |
普遍使用條件
| datepart |
縮寫 |
| year |
yyyy,yy |
| month |
mm,m |
| day |
dd,d |
| hour |
hh |
| minute |
mi,n |
| second |
ss,s |
|
| date |
篩選條件必須是時間格式 |
| 範例 |
Select ID,date From TEST
Where DATEPART(MM,date) = 11 --找出11月份者
|
| 更詳細解說 |
| Where DATEDIFF(datepart , startdate , enddate) |
| 條件 |
說明 |
| datepart |
普遍使用條件
| datepart |
縮寫 |
| year |
yyyy,yy |
| month |
mm,m |
| day |
dd,d |
| hour |
hh |
| minute |
mi,n |
| second |
ss,s |
|
| startdate |
篩選條件必須是時間格式 |
| enddate |
篩選條件必須是時間格式 |
| 範例 |
Select ID,startdate,enddate From TEST Where DATEDIFF(yyyy,startdate,enddate) < 20 ---找出年與年差未滿20年者 |
| 更詳細解說 |
| Where id Between 1 And 5 |
| 說明 |
指定資料區間,常常會使用到,如年齡範圍,日期範圍,生日等等... |
| 範例 |
Select ID From Test Where ID Between 1 And 5 |
| Where name In('Tom','Jack','Louis') |
| 說明 |
搜尋清單中符合條件 |
| 範例 |
Select name From Test Where name In('Tom','Jack','Louis') |
當值為NULL時處理方式
| 尋找值為NULL |
| 方法 |
說明 |
| IS 或 IS NOT NULL |
可以搜尋出NULL 或者 不是NULL的資料 |
| name = NULL |
竟可能不要使用這方法,但如果要使用必須要這樣做 SET ANSI_NULLS OFFSelect name From Where name=NULL (這樣就可以正常使用) |
| ISNULL() |
這函式,可以幫忙解決如果是NULL則,以什麼方法顯示,如Where ISNULL(NAME,'N/A') 這樣如果NAME為NULL則以N/A字串顯示 |
T-SQL 字串處理方式
| 符號 |
說明 |
| % |
該符號代表1個字元以上的任意字元 |
| _ |
該符號代表任意單一字元 |
| [-] |
包含指定範圍字元 範例:'[S-V]'ing ,會搜尋出 Sing,Ting,Uing,Ving |
| [^] |
包含不再指定範圍內 範例:'M[^c]',會搜尋第一字元為M,第二字元不為c的字串 |
Except 與 Interset使用方式
| 範例 |
Select name,title From Test Except | Interset Select name,title From Test2 |
| 多數用來比較資料表與資料表之間的不同 |
Tablesample 使用方式
| 基本語法 |
Select ... From ... Tablesample (N ROWS | N PERCENT) Repeatable(SEED) |
| 這可以取得亂數,但卻有缺點,取得資料會是固定區塊 參考資料SQL2008 3-26頁 |
| 改良語法 |
Select Top 10 name,title,CHECKSUM(NEWID()) From Test Order By CHECKSUM(NEWID()) |
| 這方法是靠NEWID()產生一組ID,在靠CHECKSUM()函式作計算,即可產生唯一數值,再靠Order By以及TOP ,就可產生完美亂數清單 |