2018年4月26日 星期四
win10 開啟 SMB v1
win10預設smb1是關閉的 錯誤訊息如下
因為檔案共享不安全,所以你不能連線到檔案共享。 共享需要過時的 SMB1 協議,而此協議是不安全的,可能會使你的系統遭受攻擊。你的系統需要 SMB2 或更高版本。
如果需要使用,需要使用管理員開啟 Powershell 輸入下面程式碼
Enable-WindowsOptionalFeature -Online -FeatureName smb1protocol
輸入之後需要重新啟動,如果還是無法使用,請輸入下面程式碼
Get-WindowsFeature FS-SMB1
參考連結:https://support.microsoft.com/en-us/help/2696547/how-to-enable-and-disable-smbv1-smbv2-and-smbv3-in-windows-and-windows-server
2018年3月9日 星期五
探索Facebook 隱藏的秘密: 使用Graph API
- 什麼是網路爬蟲?
- 開始使用Python撰寫網路爬蟲 ( Crawler )
- 如何安裝 Jupyter (Ipython Notebook)
- Jupyter 操作入門 (1)
- 如何使用GET 抓取網頁內容?
- 如何使用POST 抓取網頁內容?
- 如何使用Python 套件: BeautifulSoup4 剖析網頁內容?
- 如何使用Python 的requests 及BeautifulSoup4 完成淘寶爬蟲?
- 探索Facebook 隱藏的秘密: 使用Graph API
- 探索Facebook 隱藏的秘密: 使用Python 存取 Facebook 資訊
- 如何徹底解決在Windows上安裝Python 套件的惱人問題?
R語言
使用 R 語言建立自己的演算法交易事業
https://www.slideshare.net/tw_dsconf/r-71023024
搭配部位控管,使用R語言六個步驟輕鬆上手
https://m.moneydj.com/f1a.aspx?a=3c3bfe06-0843-4613-9617-0a485065a551&c=LIFENEWS
由於雅虎股市下載的資料從2007-01-05到現在,可以發現這將近10年的績效沒有很好,扣掉手續費後賺賺賠賠。別灰心,我們先使出大絕招: 馬丁格爾。(註:這是風險很高的做法,哥有練過,只是為了示範教學別亂用。)
使用馬丁格爾:上次輸,這次加倍壓;上次贏,這次壓1張。
績效瞬間變的還不差,這十年來來賺了將近30萬,最大壓的張數為64張,也就是連輸6次。
當然,馬丁的風險絕對很大,過去成功更不代表未來,我們當然不可能實際上線這樣做。來看保險一點的類馬丁。
等差類馬丁:上次輸,這次多壓1張;上次贏,這次壓1張。
雖然等差類馬丁賺得更少,但似乎更穩定了。這十年來賺了將近20萬,但最大張數只壓了7張。這樣的風險一般民眾應該還可接受。
當然,上面還是過於激進的做法。我們用一個較為保守的方法:上次輸,這次壓2張;上次贏,這次壓1張。
;;
很明顯的,綠色的回檔被有效控制住,總績效雖然只有 NT 108,757,但回檔只有NT 10,636。這個策略,再搭配部分分數資金控管法,我想就是一個可以上線的策略了。週一買,週五賣,中間過程請專心上班不用盯盤,還蠻適合上班族的朋友的。
另外申明,已上皆為教學內容,如果你覺得合理可上場廝殺,後果就要自行負責唷。當然你也可以測其他股票,其他策略,但最終還是那句話,交易的資金控管還是最重要的!
上場前請先規劃好想清楚,再來就是徹底執行瞜!! 祝大家操作順利!!
https://www.slideshare.net/tw_dsconf/r-71023024
搭配部位控管,使用R語言六個步驟輕鬆上手
https://m.moneydj.com/f1a.aspx?a=3c3bfe06-0843-4613-9617-0a485065a551&c=LIFENEWS
最近給了幾場實做的課程,原本是為了教學R語言與quantmod套件,沒想到隨意開發的結果,這績效竟然也還能看,似乎真的可以拿來上線操作。於是我決定把他寫下來分享,但我也沒實際玩過,所以後過自負。畢竟有些我使用了很有";;致命吸引力";;的馬丁。在風險沒控制好的前提下,這絕對不是一個好的做法!!
;;
;;
第二步:安裝quantmod套件,兩行指令如下:(輸入後按ctrl+a 全選,ctrl+r 執行就對了)
install.packages(";;quantmod";;)
library(qantmod)
;;
第三步:下載雅虎股市日K資料
STK=get(getSymbols(";;2330.tw";;)) ##下載台積電歷史日K資料
STK=as.matrix(to.weekly(STK)) ##將日K資料轉為週K資料
chartSeries(STK) ##畫出台積電歷史周K
;;
第四步:設定參數與損益向量
profit=setNames(numeric(length(rownames(STK))), rownames(STK))
##設定profit向量紀錄每周損益
;;
lastC=STK[1,4] ##先記錄第一週的收盤價
;;
資料下載ready後,便可開始做回測。我們進場依據為為每周第一天,開低買進台積電一張,週五收盤結束部位。因此實際的行情回測需從第二週開始,第一週只能記錄收盤價:
;;
for (m in rownames(STK)[-1]) { ##開始以每週為單位跑迴圈
;;
fee=ceiling(STK[m,1]*1000*(0.001425*2*0.5+0.003))
;;##設定手續費與稅(假設手續費打5折)
;;##設定手續費與稅(假設手續費打5折)
;;
if(STK[m,1]<;;=lastC){profit[m]=(STK[m,4]-STK[m,1])*1000-fee} ##開低買進的損益
;;
lastC=STK[m,4] ##紀錄本周收盤價,做為下週判斷開高開低的依據
}
;;
第五步:檢查策略程式碼的回測結果是否正確?
head(cbind(STK,profit),20)
## 可觀察前20筆的績效,是否確實執行策略
## 可觀察前20筆的績效,是否確實執行策略
;;
第六步: 畫出績效曲線圖
由於雅虎股市下載的資料從2007-01-05到現在,可以發現這將近10年的績效沒有很好,扣掉手續費後賺賺賠賠。別灰心,我們先使出大絕招: 馬丁格爾。(註:這是風險很高的做法,哥有練過,只是為了示範教學別亂用。)
使用馬丁格爾:上次輸,這次加倍壓;上次贏,這次壓1張。
績效瞬間變的還不差,這十年來來賺了將近30萬,最大壓的張數為64張,也就是連輸6次。
當然,馬丁的風險絕對很大,過去成功更不代表未來,我們當然不可能實際上線這樣做。來看保險一點的類馬丁。
等差類馬丁:上次輸,這次多壓1張;上次贏,這次壓1張。
雖然等差類馬丁賺得更少,但似乎更穩定了。這十年來賺了將近20萬,但最大張數只壓了7張。這樣的風險一般民眾應該還可接受。
當然,上面還是過於激進的做法。我們用一個較為保守的方法:上次輸,這次壓2張;上次贏,這次壓1張。
;;
;;
;;
左圖是原始策略,右圖是資金控管後的損益。總獲利達到NT 121,735,最大回檔為NT 34,289。且最大張數只有2張。當然,我們可以把上面的策略弄得更完美,舉例來說,只有上次輸,這次才會壓1張。
;;
很明顯的,綠色的回檔被有效控制住,總績效雖然只有 NT 108,757,但回檔只有NT 10,636。這個策略,再搭配部分分數資金控管法,我想就是一個可以上線的策略了。週一買,週五賣,中間過程請專心上班不用盯盤,還蠻適合上班族的朋友的。
另外申明,已上皆為教學內容,如果你覺得合理可上場廝殺,後果就要自行負責唷。當然你也可以測其他股票,其他策略,但最終還是那句話,交易的資金控管還是最重要的!
上場前請先規劃好想清楚,再來就是徹底執行瞜!! 祝大家操作順利!!
;;
R_Repository
https://github.com/kaiyu33/R_Repository第一次使用R語言做回測:六分鐘,就上手!
107年底Kotlin將取代Java成為Android平台上最受歡迎的語言
https://www.ithome.com.tw/news/117493
行動程式開發平台Realm去年第四季針對行動開發人員所使用的語言進行研究,並於上周發表研究成果,顯示目前Android平台上最受歡迎的行動開發語言為Java,但Kotlin可望於明年底超越Java。
Realm指出,Kotlin於Android平台上的發展路線類似iOS上的Swift。蘋果在2014年6月發表了可用來撰寫支援macOS、iOS、watchOS、tvOS及Linux等平台的Swift語言,花了14個月便取代Objective-C成為iOS平台上最受歡迎的語言。
而Kotlin則是在今年5月被Google納入Android Studio,於Android平台上提供Kotlin的一級支援。有別於Swift是由蘋果自行開發,Kotlin則是源自俄國JetBrains開發團隊的開源專案,它是一個靜態程式語言,並能與Java程式碼互動,允許開發人員於既有的專案中增加Kotlin程式碼。
Realm表示,在被納入Android Studio之前,Kotlin就是一個頗受歡迎的語言,現在它更將改變整個Android生態體系,估計到明年12月採用Kotlin開發Android程式的比例就會超過Java。
Realm認為,Android平台上的Java將日益枯萎,不只是因為有愈來愈多的Kotlin開發人員,還因為有許多開發人員正把程式從Java改為Kotlin,在今年5月之前以Java所建置的Android程式中,現在已有20%改採Kotlin,那些缺乏Kotlin技能的開發人員很快就會被視為食古不化的恐龍。
Kotlin Tutorial(1)Hello! Kotlin!
另一種JVM程式語言
如果你是一個Android或Java技術開發人員,Groovy、Scala、JRuby或Jython這些JVM Language,或許曾經聽過、看過,甚至已經研究過,不過你可能最後還是回到Java程式語言的懷抱。
Java程式設計語言已經二十幾歲了,如果有人問我「Java是不是一種「好」程式語言?」,我都會這麼回答「只要是可以幫我付帳單和貸款的,都是一種「好」技術」,算是巧妙的迴避問題。因為如果叫我想五個對於Java程式設計語言的形容詞,其中會有三個是比較負面的。如果針對具備三年以上Java程式設計師進行問卷調查,同樣請大家想五個形容詞,不知道會有什麼樣的結果。
Kotlin是一個比較新的JVM程式語言,它是在2011年7月由JetBrains發表的專案,JetBrains是開發工具IntelliJ IDEA的開發商,Android Studio就是以IntelliJ IDEA為基礎的Android官方開發工具。Kotlin v1.0在2016年2月發表,是第一個由JetBrains發佈的Kotlin正式版本。
對我來說,Kotlin跟其它JVM程式語言最大的差異,倒不是架構或語法,而是2017年5月的Google開發人員大會,發佈Android支援Kotlin為官方的程式設計語言。從Android Studio 3開始,開發人員可以直接使用Kotlin開發Android App。
Kotlin FAQ
已經熟悉Java程式設計語言
- 我為什麼要從Java轉換成Kotlin?
這個問題的另外一面,可能是「我花了幾年的時間才完全熟悉Java,現在又要我學另一種程式語言,你最好是給我一個非常好、而且很明確的道理」。雖然這是一個很嚴肅的問題,不過我只能提供自己的幾個想法給你參考:
- 不論是以開發人員或講師的角色來說,Java技術的確是不算簡單的
- 那Kotlin比Java簡單嗎?對我來說,是的
- 同樣功能的程式碼,Kotlin比Java的程式碼清爽多了(官方說最多可以減量40%)
- Kotlin同樣是在JVM運作,Java在這方面的特性Kotlin也有
- Kotlin可以完全取代Java?
- 開發Android App:是的
- 開發Java應用程式,例如WEB、JavaFX:可以(沒有「是的」那麼肯定)
- Kotlin官方網站說未來還會支援嵌入式、MacOS、iOS
- Kotlin可以和Java一起運作?
是的。Kotlin可以使用Java程式碼,Java也可以使用Kotlin程式碼。 - Kotlin和Java的語法很不一樣嗎?
是的。不一樣的程度可以想像成長得有點像的父子或母女。(這其實是廢話,這樣的形容幾乎可以套用在所有不同的程式語言) - Kotlin也有Java 8的Lambda(functional programming)?
有。 - Kotlin採用哪一種授權方式?
Apache Software License, Version 2.0。 - 需要花費多少時間學習Kotlin?
如果選擇一個好的教材,可以很容易把你在Java累積的技能快速轉換到Kotlin。(廣告:例如這個系列專欄就是好的教材,未來可能會出版電子書或實體書)
還不認識Java程式設計語言
- 我想要學習開發Android App,那我應該要先學Java還是Kotlin?
開發Android App使用Java或Kotlin都可以,都是官方正式支援的程式設計語言。你可以從幾個想法去選擇:
- 想要比較快速進入開發Android App的階段:選擇Kotlin
- 以開發Android App為主要的學習目的:選擇Kotlin
- 不知道該怎麼選擇,也沒有任何想法:選擇Kotlin
- Java跟Kotlin哪一個比較容易學習?
我覺得Kotlin比Java容易學習。我的說法應該算是有說服力的,畢竟我已經當了十年以上的講師,而且以Java與Android課程為主。 - 聽說學會Java以後可以寫很多種程式,Kotlin也可以嗎?
Java程式設計語言可以開發網頁、嵌入式、桌面與Android應用程式,Kotlin也可以。 - Kotlin程式設計語言有哪些書和學習資源?
目前只有少數幾本英文書,網路的學習資源以Kotlin官方網站為主,也是英文。(廣告:這個系列專欄是學習Kotlin不錯的資源,未來可能會出版電子書或實體書) - 目前Android App的範例與資源都是用Java寫的,Kotlin也可以使用嗎?
在Android App專案裡面,Kotlin和Java程式碼可以一起使用,也可以互相使用對方寫的程式碼。
建立Kotlin開發環境
開發Kotlin應用程式需要安裝Java SE JDK與開發工具,Kotlin開發環境有下面幾種選擇:
- JetBrains的IntelliJ IDEA
- Eclipse與Kotlin Plugin
- 在終端機編譯與執行
- 使用建置工具,包含常見的Ant、Maven與Gradle
這裡使用的開發工具是IntelliJ IDEA Community,其它方式請參考Kotlin官方網站的說明。
下載與安裝JDK
Kotlin需要Java SE JDK 1.6或更新的版本,如果你的電腦還沒有安裝Java SE JDK,依照下列的步驟下載與安裝,或是參考後面的示範影片:
- 開啟瀏覽器,在網址列輸入這個網址http://www.oracle.com/。
- 將滑鼠游標移到「Downloads」,選擇左側的「Java Developers」。
- 選擇「JDK」的「DOWNLOAD」的下載圖示。
- 進入下載JDK的網頁以後,選擇「Accept License Agreement」,依照你的作業系統版本選擇下載的連結,如果是32位元就選擇「Windows x86」,64位元的話選擇「Windows x64」。
- 儲存下載的檔案,下載完成後執行這個檔案開始安裝的步驟,建議使用預設的安裝路徑,在後續的安裝過程中全部選擇「Next >」。
- 在完成安裝的視窗選擇「Close」。
詳細的操作步驟可以參考下面的示範影片:
下載與安裝IntelliJ IDEA Community
JetBrains提供免費開放版本的IntelliJ IDEA Community,它完整支援Kotlin程式設計語言。依照下面的步驟執行下載與安裝的工作:
- 開啟瀏覽器,在網址列輸入這個網址https://www.jetbrains.com/idea/download/。
- 選擇「Community」的「DOWNLOAD」,儲存與執行下載的安裝程式:
- 啟動安裝程式後,在歡迎畫面選擇「Next>」。
- 在選擇安裝位置(Choose Install Location)畫面選擇「Next>」。
- 在安裝選項(Installation Options)畫面,依照電腦的作業系統,勾選「32-bit launcher」或「64-bit launcher」, 最後選擇「Next>」:
- 在選擇開始功能表(Choose Start Menu Folder)畫面選擇「Install」開始安裝。
- 在完成安裝的畫面,勾選「Run IntelliJ IDEA Community Edition」後選擇「Finish」:
- 安裝程式自動啟動IntelliJ IDEA Community,第一次啟動後在「Complete Installation」對話框選擇「Do not import settings」,最後選擇「OK」:
- 在「Customize IntelliJ IDEA」畫面,選擇開發工具的樣式為「IntelliJ」或「Darcula」,最後選擇「Skil All and Set Defaults」:
- 出現IntelliJ IDEA的主畫面,完成安裝與初始設定:
Hello World!
- 在IntelliJ IDEA的主畫面選擇「Create New Project」:
- 在「New Project」視窗選擇「Java」後,選擇右上角的「New…」:
- 在「Select Home Directory for JDK」視窗,選擇JDK的安裝資料夾後選擇「OK」:
- 回到「New Project」視窗,Project SDK已經設定為上一步驟的選擇:
- 在「New Project」視窗的「Additional Libraries and Frameworks」勾選「Kotlin(Java)」後選擇「Next」:
- 在「Project name」輸入專案名稱,例如「HelloKotlin」,最後選擇「Finish」。
- 在出現「Tip of the Day」對話框,取消「Show Tips on Startup」勾選,再選擇「Close」,以後啟動就不會再出現這個對話框。
- 第一次建立Kotlin專案會花費一些時間執行初始化的工作。
- 完成初始化工作後,在專案的「src」目錄按滑鼠右鍵,選擇「New -> Kotlin File/Class」:
- 在「New Kotlin file/class」對話框的「Name:」輸入程式碼檔案名稱,例如「HelloWorld」,最後選擇「OK」。
- 在新建立的程式碼檔案輸入下面的內容:
123fun main(args: Array) { println("Hello World!")} - 用滑鼠游標選擇Kotlin圖示後選擇「Run 'HelloWorld.kt'」,也可以使用快速鍵「Ctrl+Shift+F10」:
- 執行程式以後在畫面下方顯示「Hello World!」:
第一個Kotlin程式碼FAQ
- 不需要宣告類別?
是的。 - 「fun」好像是用來宣告main方法?
是的。Kotlin程式的進入點(Java的main方法),是一個名稱為「main」,參數為「Array、字串陣列」的函式。 - println為什麼沒有System.out?
其實println是Kotlin定義在Console.kt裡面的函式。 - 敘述的最後面不需要分號(;)?
是的。你也可以加上分號,不過那是多餘的。如果需要在一行執行多個敘述,可以使用分號隔開。例如:
123fun main(args: Array) { println("One"); println("Two")}
下一步
想要趕快開始寫Kotlin程式?在安裝好開發環境以後,接下來的「10分鐘認識Kotlin」,使用精心挑選的主題,讓你快速認識Kotlin的基本精神。
相關的檔案都可以在GitHub瀏覽與下載。
PHP Laravel 開發入門
source: http://www.codedata.com.tw/uncategorized/php-laravel-dev-tutorial-1st-class-getting-started
簡介
Laravel是近年來相當熱門的PHP框架,雖然PHP是容易學習與撰寫的程式語言,但當網站專案日漸龐大時,沒有一套規範來管理這些程式碼,不僅造成錯誤叢生、維護困難,更造成開發人員的負擔。而眾多的PHP框架也為了解決這些問題如雨後春筍般林立,至於為什麼選擇Laravel的原因為何?主要是少了許多繁瑣的設定,而框架的觀念也淺顯易懂,更可以搭配命令列指令,加快開發的速度,也因此獲得許多開發者的青睬,在最近幾年的評比中都名列前矛。引述Laravel 台灣的Laravel 哲學
Laravel 是一套富有表達性且具有簡潔語法的網頁應用程式框架。我們認為開發過程應該是愉悅且有創造性的體驗。Laravel 努力減少開發過程中的不便,因此我們提供了驗證(authentication)、路由(routing)、sessions、快取(caching) 等開發過程中經常用到的工具或功能。
Laravel 目標是給開發者創造一個愉快的開發過程,並且不犧牲應用程式的功能性。快樂的開發者才能創造最棒的原始碼。為了這個目的,我們竭取了各框架的優點集中到 Laravel 中,這些框架甚至是基於 Ruby on Rails、ASP.NET MVC 和 Sinatra 等開發語言或工具。
Laravel 是易於理解且強大的,它提供了強大的工具來開發大型、穩健的應用程式。傑出的 IoC、資料庫遷移工具和緊密集成的單元測試,這些工具賦予你構建任何應用程式的能力。
在這個單元中,會教導讀者如何在Windows環境中開發Laravel程式。
系統需求
由於Laravel會使用到許多PHP的特殊功能,甚至會使用到新的PHP版本中特性,所以在學習Laravel前需注意相關設定及環境需求。
以上需求為Laravel 5.3
- PHP >= 5.6.4
- OpenSSL PHP Extension
- PDO PHP Extension
- Mbstring PHP Extension
- Tokenizer PHP Extension
- XML PHP Extension
另外還需要安裝Composer這個工具,Composer是一個PHP依賴性管理工具。透過宣告專案需要的依賴函式庫,能在專案中安裝/管理/更新這些套件。
安裝
一、安裝Apache、MySQL、PHP環境
為了讓讀者能快速的撰寫程式,作者在Github上已經整理出一個適合開發Laravel的XAMPP環境。我們進到 https://github.com/superlevin/xamppforlaravel 點選 Clone or Download 後按 Download ZIP。
下載後,解壓縮到d:\xampp就可以運作了。執行 xampp-control 後,開啟相關服務即可。
二、安裝 composer,到 https://getcomposer.org/download/ 下載Composer-Setup.exe。
安裝時,將PHP路徑指向D:\xampp\php.exe
三、進入終端機模式(開始→執行 cmd),然後設定php到系統變數
set PATH=%PATH%;d:\xampp\php
四、新增Laravel專案,進入終端機模式(開始→執行 cmd)
進入d:\xampp\htdocs目錄,輸入 composer create-project laravel/laravel blog –prefer-dist
進入d:\xampp\htdocs目錄,輸入 composer create-project laravel/laravel blog –prefer-dist
然後可以去泡杯咖啡小憩片刻後,最後看到 Application key就代表完成了!
五、接著來看看Laravel安裝完的初始畫面。一種是透過xampp,在網址列打上 http://localhost:8899/blog/public\ 就可以看到頁面;第二種呢,直接透過命令列模式,切換到 xampp\htdocs\blog下面輸入 php artisan serve,接著到 http://localhost:8000/就可以看到畫面。我們下次見!
PHP Laravel 開發入門(二) – 設置與目錄架構
2018年1月29日 星期一
MS-SQL開發常用匯總和t-sql技巧集錦
MS-SQL開發常用匯總和t-sql技巧集錦
1.把長日期轉換為短日期 Convert(char(10),getdate(),120)
MS-SQL資料庫開發常用匯總 1.按姓氏筆劃排序:
1.把長日期轉換為短日期 Convert(char(10),getdate(),120)
MS-SQL資料庫開發常用匯總 1.按姓氏筆劃排序:
Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as
2.資料庫加密:
select encrypt('原始密碼')
select pwdencrypt('原始密碼')
select pwdcompare('原始密碼','加密後密碼') = 1--相同;否則不相同 encrypt('原始密碼')
select pwdencrypt('原始密碼')
select pwdcompare('原始密碼','加密後密碼') = 1--相同;否則不相同
select pwdencrypt('原始密碼')
select pwdcompare('原始密碼','加密後密碼') = 1--相同;否則不相同 encrypt('原始密碼')
select pwdencrypt('原始密碼')
select pwdcompare('原始密碼','加密後密碼') = 1--相同;否則不相同
3.取回表中欄位:
declare @list varchar(1000),@sql nvarchar(1000)
select @list=@list+','+b.name from sysobjects a,syscolumns b where a.id=b.id and a.name='表A'
set @sql='select '+right(@list,len(@list)-1)+' from 表A'
exec (@sql)
select @list=@list+','+b.name from sysobjects a,syscolumns b where a.id=b.id and a.name='表A'
set @sql='select '+right(@list,len(@list)-1)+' from 表A'
exec (@sql)
4.查看硬碟分區:
EXEC master..xp_fixeddrives
5.比較A,B表是否相等:
if (select checksum_agg(binary_checksum(*)) from A)
=
(select checksum_agg(binary_checksum(*)) from B)
print '相等'
else
print '不相等'
=
(select checksum_agg(binary_checksum(*)) from B)
print '相等'
else
print '不相等'
6.殺掉所有的事件探察器進程:
DECLARE hcforeach CURSOR GLOBAL FOR SELECT 'kill '+RTRIM(spid) FROM master.dbo.sysprocesses
WHERE program_name IN('SQL profiler',N'SQL 事件探查器')
EXEC sp_msforeach_worker '?'
WHERE program_name IN('SQL profiler',N'SQL 事件探查器')
EXEC sp_msforeach_worker '?'
7.記錄搜索:
開頭到N條記錄
開頭到N條記錄
Select Top N * From 表
-------------------------------
N到M條記錄(要有主索引ID)
Select Top M-N * From 表 Where ID in (Select Top M ID From 表) Order by ID Desc
----------------------------------
N到結尾記錄
Select Top N * From 表 Order by ID Desc
-------------------------------
N到M條記錄(要有主索引ID)
Select Top M-N * From 表 Where ID in (Select Top M ID From 表) Order by ID Desc
----------------------------------
N到結尾記錄
Select Top N * From 表 Order by ID Desc
8.如何修改資料庫的名稱:
sp_renamedb 'old_name', 'new_name'
9:獲取當前資料庫中的所有用戶表
select Name from sysobjects where xtype='u' and status>=0
10:獲取某一個表的所有欄位
select name from syscolumns where id=object_id('表名')
11:查看與某一個表相關的視圖、存儲過程、函數
select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'
12:查看當前資料庫中所有存儲過程
select name as 存儲過程名稱 from sysobjects where xtype='P'
13:查詢用戶創建的所有資料庫
select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')
或者
select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01
14:查詢某一個表的欄位和資料類型
select column_name,data_type from information_schema.columns
where table_name = '表名'
[n].[標題]:
Select * From TableName Order By CustomerName
[n].[標題]:
where table_name = '表名'
[n].[標題]:
Select * From TableName Order By CustomerName
[n].[標題]:
一、 只複製一個表結構,不複製資料
select top 0 * into [t1] from [t2]
二、 獲取資料庫中某個物件的創建腳本
二、 獲取資料庫中某個物件的創建腳本
1、 先用下面的腳本創建一個函數
if exists(select 1 from sysobjects where id=object_id('fgetscript') and objectproperty(id,'IsInlineFunction')=0)
drop function fgetscript
go
drop function fgetscript
go
create function fgetscript(
@servername varchar(50) --伺服器名
,@userid varchar(50)='sa' --用戶名,如果為nt驗證方式,則為空
,@password varchar(50)='' --密碼
,@databasename varchar(50) --資料庫名稱
,@objectname varchar(250) --對象名
@servername varchar(50) --伺服器名
,@userid varchar(50)='sa' --用戶名,如果為nt驗證方式,則為空
,@password varchar(50)='' --密碼
,@databasename varchar(50) --資料庫名稱
,@objectname varchar(250) --對象名
) returns varchar(8000)
as
begin
declare @re varchar(8000) --返回腳本
declare @srvid int,@dbsid int --定義伺服器、資料庫集id
declare @dbid int,@tbid int --資料庫、表id
declare @err int,@src varchar(255), @desc varchar(255) --錯誤處理變數
as
begin
declare @re varchar(8000) --返回腳本
declare @srvid int,@dbsid int --定義伺服器、資料庫集id
declare @dbid int,@tbid int --資料庫、表id
declare @err int,@src varchar(255), @desc varchar(255) --錯誤處理變數
--創建sqldmo對象
exec @err=sp_oacreate 'sqldmo.sqlserver',@srvid output
if @err<>0 goto lberr
exec @err=sp_oacreate 'sqldmo.sqlserver',@srvid output
if @err<>0 goto lberr
--連接伺服器
if isnull(@userid,'')='' --如果是 Nt驗證方式
begin
exec @err=sp_oasetproperty @srvid,'loginsecure',1
if @err<>0 goto lberr
if isnull(@userid,'')='' --如果是 Nt驗證方式
begin
exec @err=sp_oasetproperty @srvid,'loginsecure',1
if @err<>0 goto lberr
exec @err=sp_oamethod @srvid,'connect',null,@servername
end
else
exec @err=sp_oamethod @srvid,'connect',null,@servername,@userid,@password
end
else
exec @err=sp_oamethod @srvid,'connect',null,@servername,@userid,@password
if @err<>0 goto lberr
--獲取資料庫集
exec @err=sp_oagetproperty @srvid,'databases',@dbsid output
if @err<>0 goto lberr
exec @err=sp_oagetproperty @srvid,'databases',@dbsid output
if @err<>0 goto lberr
--獲取要取得腳本的資料庫id
exec @err=sp_oamethod @dbsid,'item',@dbid output,@databasename
if @err<>0 goto lberr
exec @err=sp_oamethod @dbsid,'item',@dbid output,@databasename
if @err<>0 goto lberr
--獲取要取得腳本的對象id
exec @err=sp_oamethod @dbid,'getobjectbyname',@tbid output,@objectname
if @err<>0 goto lberr
exec @err=sp_oamethod @dbid,'getobjectbyname',@tbid output,@objectname
if @err<>0 goto lberr
--取得腳本
exec @err=sp_oamethod @tbid,'script',@re output
if @err<>0 goto lberr
exec @err=sp_oamethod @tbid,'script',@re output
if @err<>0 goto lberr
--print @re
return(@re)
return(@re)
lberr:
exec sp_oageterrorinfo NULL, @src out, @desc out
declare @errb varbinary(4)
set @errb=cast(@err as varbinary(4))
exec master..xp_varbintohexstr @errb,@re out
set @re='錯誤號: '+@re
+char(13)+'錯誤源: '+@src
+char(13)+'錯誤描述: '+@desc
return(@re)
end
go
exec sp_oageterrorinfo NULL, @src out, @desc out
declare @errb varbinary(4)
set @errb=cast(@err as varbinary(4))
exec master..xp_varbintohexstr @errb,@re out
set @re='錯誤號: '+@re
+char(13)+'錯誤源: '+@src
+char(13)+'錯誤描述: '+@desc
return(@re)
end
go
2、 用法如下
用法如下,
用法如下,
print dbo.fgetscript('伺服器名','用戶名','密碼','資料庫名','表名或其他物件名')
3、 如果要獲取庫裏所有物件的腳本,如如下方式
declare @name varchar(250)
declare #aa cursor for
select name from sysobjects where xtype not in('S','PK','D','X','L')
open #aa
fetch next from #aa into @name
while @@fetch_status=0
begin
print dbo.fgetscript('onlytiancai','sa','sa','database',@name)
fetch next from #aa into @name
end
close #aa
deallocate #aa
declare #aa cursor for
select name from sysobjects where xtype not in('S','PK','D','X','L')
open #aa
fetch next from #aa into @name
while @@fetch_status=0
begin
print dbo.fgetscript('onlytiancai','sa','sa','database',@name)
fetch next from #aa into @name
end
close #aa
deallocate #aa
4、 聲明,此函數是csdn鄒建鄒老大提供的
三、 分隔字串
如果有一個用逗號分割開的字串,比如說"a,b,c,d,1,2,3,4",如何用t-sql獲取這個字串有幾個元素,獲取第幾個元素的值是多少呢?因為t-sql裏沒有split函數,也沒有陣列的概念,所以只能自己寫幾個函數了。
1、 獲取元素個數的函數
create function getstrarrlength (@str varchar(8000))
returns int
as
begin
declare @int_return int
declare @start int
declare @next int
declare @location int
select @str =','+ @str +','
select @str=replace(@str,',,',',')
select @start =1
select @next =1
select @location = charindex(',',@str,@start)
while (@location <>0)
begin
select @start = @location +1
select @location = charindex(',',@str,@start)
select @next =@next +1
end
select @int_return = @next-2
return @int_return
end
returns int
as
begin
declare @int_return int
declare @start int
declare @next int
declare @location int
select @str =','+ @str +','
select @str=replace(@str,',,',',')
select @start =1
select @next =1
select @location = charindex(',',@str,@start)
while (@location <>0)
begin
select @start = @location +1
select @location = charindex(',',@str,@start)
select @next =@next +1
end
select @int_return = @next-2
return @int_return
end
2、 獲取指定索引的值的函數
create function getstrofindex (@str varchar(8000),@index int =0)
returns varchar(8000)
as
begin
declare @str_return varchar(8000)
declare @start int
declare @next int
declare @location int
select @start =1
select @next =1 --如果習慣從0開始則select @next =0
select @location = charindex(',',@str,@start)
while (@location <>0 and @index > @next )
begin
select @start = @location +1
select @location = charindex(',',@str,@start)
select @next =@next +1
end
if @location =0 select @location =len(@str)+1 --如果是因為沒有逗號退出,則認為逗號在字串後
select @str_return = substring(@str,@start,@location -@start) --@start肯定是逗號之後的位置或者就是初始值1
if (@index <> @next ) select @str_return = '' --如果二者不相等,則是因為逗號太少,或者@index小於@next的初始值1。
return @str_return
end
returns varchar(8000)
as
begin
declare @str_return varchar(8000)
declare @start int
declare @next int
declare @location int
select @start =1
select @next =1 --如果習慣從0開始則select @next =0
select @location = charindex(',',@str,@start)
while (@location <>0 and @index > @next )
begin
select @start = @location +1
select @location = charindex(',',@str,@start)
select @next =@next +1
end
if @location =0 select @location =len(@str)+1 --如果是因為沒有逗號退出,則認為逗號在字串後
select @str_return = substring(@str,@start,@location -@start) --@start肯定是逗號之後的位置或者就是初始值1
if (@index <> @next ) select @str_return = '' --如果二者不相等,則是因為逗號太少,或者@index小於@next的初始值1。
return @str_return
end
3、 測試
SELECT [dbo].[getstrarrlength]('1,2,3,4,a,b,c,d')
SELECT [dbo].[getstrofindex]('1,2,3,4,a,b,c,d',5)
四、 一條語句執行跨越若干個資料庫
我要在一條語句裏操作不同的伺服器上的不同的資料庫裏的不同的表,怎麼辦呢?
第一種方法:
我要在一條語句裏操作不同的伺服器上的不同的資料庫裏的不同的表,怎麼辦呢?
第一種方法:
select * from OPENDATASOURCE('SQLOLEDB','Data Source=遠程ip;User ID=sa;Password=密碼').庫名.dbo.表名
第二種方法:
先使用聯結伺服器:
先使用聯結伺服器:
EXEC sp_addlinkedserver '別名','','MSDASQL',NULL,NULL,'DRIVER={SQL Server};SERVER=遠程名;UID=用戶;PWD=密碼;'
exec sp_addlinkedsrvlogin @rmtsrvname='別名',@useself='false',@locallogin='sa',@rmtuser='sa',@rmtpassword='密碼'
GO
exec sp_addlinkedsrvlogin @rmtsrvname='別名',@useself='false',@locallogin='sa',@rmtuser='sa',@rmtpassword='密碼'
GO
然後你就可以如下:
select * from 別名.庫名.dbo.表名
insert 庫名.dbo.表名 select * from 別名.庫名.dbo.表名
select * into 庫名.dbo.新表名 from 別名.庫名.dbo.表名
go
select * from 別名.庫名.dbo.表名
insert 庫名.dbo.表名 select * from 別名.庫名.dbo.表名
select * into 庫名.dbo.新表名 from 別名.庫名.dbo.表名
go
五、 怎樣獲取一個表中所有的欄位資訊
蛙蛙推薦:怎樣獲取一個表中所有欄位的資訊
先創建一個視圖
蛙蛙推薦:怎樣獲取一個表中所有欄位的資訊
先創建一個視圖
Create view fielddesc
as
select o.name as table_name,c.name as field_name,t.name as type,c.length as
as
select o.name as table_name,c.name as field_name,t.name as type,c.length as
length,c.isnullable as isnullable,convert(varchar(30),p.value) as desp
from syscolumns c
join systypes t on c.xtype = t.xusertype
join sysobjects o on o.id=c.id
left join sysproperties p on p.smallid=c.colid and p.id=o.id
where o.xtype='U'
from syscolumns c
join systypes t on c.xtype = t.xusertype
join sysobjects o on o.id=c.id
left join sysproperties p on p.smallid=c.colid and p.id=o.id
where o.xtype='U'
查詢時:
Select * from fielddesc where table_name = '你的表名'
還有個更強的語句,是鄒建寫的,也寫出來吧
SELECT
(case when a.colorder=1 then d.name else '' end) N'表名',
a.colorder N'欄位序號',
a.name N'欄位名',
(case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) N'標識',
(case when (SELECT count(*)
FROM sysobjects
WHERE (name in
(SELECT name
FROM sysindexes
WHERE (id = a.id) AND (indid in
(SELECT indid
FROM sysindexkeys
WHERE (id = a.id) AND (colid in
(SELECT colid
FROM syscolumns
WHERE (id = a.id) AND (name = a.name))))))) AND
(xtype = 'PK'))>0 then '√' else '' end) N'主鍵',
b.name N'類型',
a.length N'佔用位元組數',
COLUMNPROPERTY(a.id,a.name,'PRECISION') as N'長度',
isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as N'小數位數',
(case when a.isnullable=1 then '√'else '' end) N'允許空',
isnull(e.text,'') N'預設值',
isnull(g.[value],'') AS N'欄位說明'
--into ##tx
(case when a.colorder=1 then d.name else '' end) N'表名',
a.colorder N'欄位序號',
a.name N'欄位名',
(case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) N'標識',
(case when (SELECT count(*)
FROM sysobjects
WHERE (name in
(SELECT name
FROM sysindexes
WHERE (id = a.id) AND (indid in
(SELECT indid
FROM sysindexkeys
WHERE (id = a.id) AND (colid in
(SELECT colid
FROM syscolumns
WHERE (id = a.id) AND (name = a.name))))))) AND
(xtype = 'PK'))>0 then '√' else '' end) N'主鍵',
b.name N'類型',
a.length N'佔用位元組數',
COLUMNPROPERTY(a.id,a.name,'PRECISION') as N'長度',
isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as N'小數位數',
(case when a.isnullable=1 then '√'else '' end) N'允許空',
isnull(e.text,'') N'預設值',
isnull(g.[value],'') AS N'欄位說明'
--into ##tx
FROM syscolumns a left join systypes b
on a.xtype=b.xusertype
inner join sysobjects d
on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
left join syscomments e
on a.cdefault=e.id
left join sysproperties g
on a.id=g.id AND a.colid = g.smallid
order by object_name(a.id),a.colorder
on a.xtype=b.xusertype
inner join sysobjects d
on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
left join syscomments e
on a.cdefault=e.id
left join sysproperties g
on a.id=g.id AND a.colid = g.smallid
order by object_name(a.id),a.colorder
六、 時間格式轉換問題
因為新開發的軟體需要用一些舊軟體生成的一些資料,在時間格式上不統一,只能手工轉換,研究了一下午寫了三條語句,以前沒怎麼用過convert函數和case語句,還有"+"操作符在不同上下文環境也會起到不同的作用,把我搞暈了要,不過現在看來是差不多弄好了。
1、把所有"70.07.06"這樣的值變成"1970-07-06"
UPDATE lvshi
SET shengri = '19' + REPLACE(shengri, '.', '-')
WHERE (zhiyezheng = '139770070153')
SET shengri = '19' + REPLACE(shengri, '.', '-')
WHERE (zhiyezheng = '139770070153')
2、在"1970-07-06"裏提取"70","07","06"
SELECT SUBSTRING(shengri, 3, 2) AS year, SUBSTRING(shengri, 6, 2) AS month,
SUBSTRING(shengri, 9, 2) AS day
FROM lvshi
WHERE (zhiyezheng = '139770070153')
SUBSTRING(shengri, 9, 2) AS day
FROM lvshi
WHERE (zhiyezheng = '139770070153')
3、把一個時間類型欄位轉換成"1970-07-06"
UPDATE lvshi
SET shenling = CONVERT(varchar(4), YEAR(shenling))
+ '-' + CASE WHEN LEN(MONTH(shenling)) = 1 THEN '0' + CONVERT(varchar(2),
month(shenling)) ELSE CONVERT(varchar(2), month(shenling))
END + '-' + CASE WHEN LEN(day(shenling)) = 1 THEN '0' + CONVERT(char(2),
day(shenling)) ELSE CONVERT(varchar(2), day(shenling)) END
WHERE (zhiyezheng = '139770070153')
SET shenling = CONVERT(varchar(4), YEAR(shenling))
+ '-' + CASE WHEN LEN(MONTH(shenling)) = 1 THEN '0' + CONVERT(varchar(2),
month(shenling)) ELSE CONVERT(varchar(2), month(shenling))
END + '-' + CASE WHEN LEN(day(shenling)) = 1 THEN '0' + CONVERT(char(2),
day(shenling)) ELSE CONVERT(varchar(2), day(shenling)) END
WHERE (zhiyezheng = '139770070153')
七、 分區視圖
分區視圖是提高查詢性能的一個很好的辦法
分區視圖是提高查詢性能的一個很好的辦法
--看下麵的示例
--示例表
create table tempdb.dbo.t_10(
id int primary key check(id between 1 and 10),name varchar(10))
create table tempdb.dbo.t_10(
id int primary key check(id between 1 and 10),name varchar(10))
create table pubs.dbo.t_20(
id int primary key check(id between 11 and 20),name varchar(10))
id int primary key check(id between 11 and 20),name varchar(10))
create table northwind.dbo.t_30(
id int primary key check(id between 21 and 30),name varchar(10))
go
id int primary key check(id between 21 and 30),name varchar(10))
go
--分區視圖
create view v_t
as
select * from tempdb.dbo.t_10
union all
select * from pubs.dbo.t_20
union all
select * from northwind.dbo.t_30
go
create view v_t
as
select * from tempdb.dbo.t_10
union all
select * from pubs.dbo.t_20
union all
select * from northwind.dbo.t_30
go
--插入資料
insert v_t select 1 ,'aa'
union all select 2 ,'bb'
union all select 11,'cc'
union all select 12,'dd'
union all select 21,'ee'
union all select 22,'ff'
insert v_t select 1 ,'aa'
union all select 2 ,'bb'
union all select 11,'cc'
union all select 12,'dd'
union all select 21,'ee'
union all select 22,'ff'
--更新資料
update v_t set name=name+'_更新' where right(id,1)=1
update v_t set name=name+'_更新' where right(id,1)=1
--刪除測試
delete from v_t where right(id,1)=2
delete from v_t where right(id,1)=2
--顯示結果
select * from v_t
go
select * from v_t
go
--刪除測試
drop table northwind.dbo.t_30,pubs.dbo.t_20,tempdb.dbo.t_10
drop view v_t
drop table northwind.dbo.t_30,pubs.dbo.t_20,tempdb.dbo.t_10
drop view v_t
/**//**//**//*--測試結果
id name
----------- ----------
1 aa_更新
11 cc_更新
21 ee_更新
----------- ----------
1 aa_更新
11 cc_更新
21 ee_更新
(所影響的行數為 3 行)
==*/
==*/
八、 樹型的實現
--參考
--樹形資料查詢示例
--作者: 鄒建
--作者: 鄒建
--示例數據
create table [tb]([id] int identity(1,1),[pid] int,name varchar(20))
insert [tb] select 0,'中國'
union all select 0,'美國'
union all select 0,'加拿大'
union all select 1,'北京'
union all select 1,'上海'
union all select 1,'江蘇'
union all select 6,'蘇州'
union all select 7,'常熟'
union all select 6,'南京'
union all select 6,'無錫'
union all select 2,'紐約'
union all select 2,'三藩市'
go
--查詢指定id的所有子
create function f_cid(
@id int
)returns @re table([id] int,[level] int)
as
begin
declare @l int
set @l=0
insert @re select @id,@l
while @@rowcount>0
begin
set @l=@l+1
insert @re select a.[id],@l
from [tb] a,@re b
where a.[pid]=b.[id] and b.[level]=@l-1
end
/**//**//**//**//**//**//**//*--如果只顯示最明細的子(下面沒有子),則加上這個刪除
delete a from @re a
where exists(
select 1 from [tb] where [pid]=a.[id])
--*/
return
end
go
create function f_cid(
@id int
)returns @re table([id] int,[level] int)
as
begin
declare @l int
set @l=0
insert @re select @id,@l
while @@rowcount>0
begin
set @l=@l+1
insert @re select a.[id],@l
from [tb] a,@re b
where a.[pid]=b.[id] and b.[level]=@l-1
end
/**//**//**//**//**//**//**//*--如果只顯示最明細的子(下面沒有子),則加上這個刪除
delete a from @re a
where exists(
select 1 from [tb] where [pid]=a.[id])
--*/
return
end
go
--調用(查詢所有的子)
select a.*,層次=b.[level] from [tb] a,f_cid(2)b where a.[id]=b.[id]
go
select a.*,層次=b.[level] from [tb] a,f_cid(2)b where a.[id]=b.[id]
go
--刪除測試
drop table [tb]
drop function f_cid
go
drop table [tb]
drop function f_cid
go
九、 排序問題
CREATE TABLE [t] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[GUID] [uniqueidentifier] NULL
) ON [PRIMARY]
GO
[id] [int] IDENTITY (1, 1) NOT NULL ,
[GUID] [uniqueidentifier] NULL
) ON [PRIMARY]
GO
下麵這句執行5次
insert t values (newid())
查看執行結果
select * from t
1、 第一種
select * from t
order by case id when 4 then 1
when 5 then 2
when 1 then 3
when 2 then 4
when 3 then 5 end
2、 第二種
select * from t order by (id+2)%6
3、 第三種
select * from t order by charindex(cast(id as varchar),'45123')
4、 第四種
select * from t
WHERE id between 0 and 5
order by charindex(cast(id as varchar),'45123')
5、 第五種
select * from t order by case when id >3 then id-5 else id end
6、 第六種
select * from t order by id / 4 desc,id asc
十、 一條語句刪除一批記錄
首先id列是int標識類類型,然後刪除ID值為5,6,8,9,10,11的列,這裏的cast函數不能用convert函數代替,而且轉換的類型必須是varchar,而不能是char,否則就會執行出你不希望的結果,這裏的"5,6,8,9,10,11"可以是你在頁面上獲取的一個chkboxlist構建成的值,然後用下面的一句就全部刪
除了,比迴圈用多條語句高效吧應該。
首先id列是int標識類類型,然後刪除ID值為5,6,8,9,10,11的列,這裏的cast函數不能用convert函數代替,而且轉換的類型必須是varchar,而不能是char,否則就會執行出你不希望的結果,這裏的"5,6,8,9,10,11"可以是你在頁面上獲取的一個chkboxlist構建成的值,然後用下面的一句就全部刪
除了,比迴圈用多條語句高效吧應該。
delete from [fujian] where charindex(','+cast([id] as varchar)+',',','+'5,6,8,9,10,11,'+',')>0
還有一種就是
delete from table1 where id in(1,2,3,4 )
十一、獲取子表內的一列資料的組合字串
下面這個函數獲取05年已經註冊了的某個所的律師,唯一一個參數就是事務所的名稱,然後返回zhuce欄位裏包含05字樣的所有律師。
下面這個函數獲取05年已經註冊了的某個所的律師,唯一一個參數就是事務所的名稱,然後返回zhuce欄位裏包含05字樣的所有律師。
CREATE FUNCTION fn_Get05LvshiNameBySuo (@p_suo Nvarchar(50))
RETURNS Nvarchar(2000)
AS
BEGIN
DECLARE @LvshiNames varchar(2000), @name varchar(50)
select @LvshiNames=''
DECLARE lvshi_cursor CURSOR FOR
資料庫裏有1,2,3,4,5 共5條記錄,要用一條sql語句讓其排序,使它排列成4,5,1,2,3,怎麼寫?
--資料操作
--資料操作
SELECT --從資料庫表中檢索資料行和列
INSERT --向資料庫表添加新資料行
DELETE --從資料庫表中刪除資料行
UPDATE --更新資料庫表中的資料
INSERT --向資料庫表添加新資料行
DELETE --從資料庫表中刪除資料行
UPDATE --更新資料庫表中的資料
--資料定義
CREATE TABLE --創建一個資料庫表
DROP TABLE --從資料庫中刪除表
ALTER TABLE --修改資料庫表結構
CREATE VIEW --創建一個視圖
DROP VIEW --從資料庫中刪除視圖
CREATE INDEX --為資料庫表創建一個索引
DROP INDEX --從資料庫中刪除索引
CREATE PROCEDURE --創建一個存儲過程
DROP PROCEDURE --從資料庫中刪除存儲過程
CREATE TRIGGER --創建一個觸發器
DROP TRIGGER --從資料庫中刪除觸發器
CREATE SCHEMA --向資料庫添加一個新模式
DROP SCHEMA --從資料庫中刪除一個模式
CREATE DOMAIN --創建一個資料值域
ALTER DOMAIN --改變域定義
DROP DOMAIN --從資料庫中刪除一個域
DROP TABLE --從資料庫中刪除表
ALTER TABLE --修改資料庫表結構
CREATE VIEW --創建一個視圖
DROP VIEW --從資料庫中刪除視圖
CREATE INDEX --為資料庫表創建一個索引
DROP INDEX --從資料庫中刪除索引
CREATE PROCEDURE --創建一個存儲過程
DROP PROCEDURE --從資料庫中刪除存儲過程
CREATE TRIGGER --創建一個觸發器
DROP TRIGGER --從資料庫中刪除觸發器
CREATE SCHEMA --向資料庫添加一個新模式
DROP SCHEMA --從資料庫中刪除一個模式
CREATE DOMAIN --創建一個資料值域
ALTER DOMAIN --改變域定義
DROP DOMAIN --從資料庫中刪除一個域
--資料控制
GRANT --授予用戶訪問許可權
DENY --拒絕用戶訪問
REVOKE --解除用戶訪問許可權
DENY --拒絕用戶訪問
REVOKE --解除用戶訪問許可權
--事務控制
COMMIT --結束當前事務
ROLLBACK --中止當前事務
SET TRANSACTION --定義當前事務資料訪問特徵
ROLLBACK --中止當前事務
SET TRANSACTION --定義當前事務資料訪問特徵
--程式化SQL
DECLARE --為查詢設定游標
EXPLAN --為查詢描述資料訪問計畫
OPEN --檢索查詢結果打開一個游標
FETCH --檢索一行查詢結果
CLOSE --關閉游標
PREPARE --為動態執行準備SQL 語句
EXECUTE --動態地執行SQL 語句
DESCRIBE --描述準備好的查詢
EXPLAN --為查詢描述資料訪問計畫
OPEN --檢索查詢結果打開一個游標
FETCH --檢索一行查詢結果
CLOSE --關閉游標
PREPARE --為動態執行準備SQL 語句
EXECUTE --動態地執行SQL 語句
DESCRIBE --描述準備好的查詢
---局部變數
declare @id char(10)
--set @id = '10010001'
select @id = '10010001'
--set @id = '10010001'
select @id = '10010001'
---總體變數
---必須以@@開頭
--IF ELSE
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
print 'x > y' --列印字串'x > y'
else if @y > @z
print 'y > z'
else print 'z > y'
--CASE
use pangu
update employee
set e_wage =
case
when job_level = ’1’ then e_wage*1.08
when job_level = ’2’ then e_wage*1.07
when job_level = ’3’ then e_wage*1.06
else e_wage*1.05
end
--WHILE CONTINUE BREAK
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
print @x --列印變數x 的值
while @y < 3
begin
select @c = 100*@x + @y
print @c --列印變數c 的值
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end
--WAITFOR
select @x = 1 @y = 2 @z=3
if @x > @y
print 'x > y' --列印字串'x > y'
else if @y > @z
print 'y > z'
else print 'z > y'
--CASE
use pangu
update employee
set e_wage =
case
when job_level = ’1’ then e_wage*1.08
when job_level = ’2’ then e_wage*1.07
when job_level = ’3’ then e_wage*1.06
else e_wage*1.05
end
--WHILE CONTINUE BREAK
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
print @x --列印變數x 的值
while @y < 3
begin
select @c = 100*@x + @y
print @c --列印變數c 的值
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end
--WAITFOR
--例 等待1 小時2 分零3 秒後才執行SELECT 語句
waitfor delay ’01:02:03’
select * from employee
select * from employee
--例 等到晚上11 點零8 分後才執行SELECT 語句
waitfor time ’23:08:00’
SELECT
select *(列名) from table_name(表名) where column_name operator value ex宿主)
select * from stock_information where stockid = str(nid)
stockname = 'str_name'
stockname like '% find this %'
stockname like '[a-zA-Z]%' --------- ([]指定值的範圍)
stockname like '[^F-M]%' --------- (^排除指定範圍)
--------- 只能在使用like關鍵字的where子句中使用通配符)
or stockpath = 'stock_path'
or stocknumber < 1000
and stockindex = 24
not stocksex = 'man'
stocknumber between 20 and 100
stocknumber in(10,20,30)
order by stockid desc(asc) --------- 排序,desc-降冪,asc-昇冪
order by 1,2 --------- by列號
stockname = (select stockname from stock_information where stockid = 4)
--------- 子查詢
--------- 除非能確保內層select只返回一個行的值
--------- 否則應在外層where子句中用一個in限定符
select distinct column_name form table_name
--------- distinct指定檢索獨有的列值,不重複
select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name
select stockname , "stocknumber" = count(*) from table_name group by stockname
--------- group by 將表按行分組,指定列中有相同的值
having count(*) = 2 --------- having選定指定的組
select * from stock_information where stockid = str(nid)
stockname = 'str_name'
stockname like '% find this %'
stockname like '[a-zA-Z]%' --------- ([]指定值的範圍)
stockname like '[^F-M]%' --------- (^排除指定範圍)
--------- 只能在使用like關鍵字的where子句中使用通配符)
or stockpath = 'stock_path'
or stocknumber < 1000
and stockindex = 24
not stocksex = 'man'
stocknumber between 20 and 100
stocknumber in(10,20,30)
order by stockid desc(asc) --------- 排序,desc-降冪,asc-昇冪
order by 1,2 --------- by列號
stockname = (select stockname from stock_information where stockid = 4)
--------- 子查詢
--------- 除非能確保內層select只返回一個行的值
--------- 否則應在外層where子句中用一個in限定符
select distinct column_name form table_name
--------- distinct指定檢索獨有的列值,不重複
select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name
select stockname , "stocknumber" = count(*) from table_name group by stockname
--------- group by 將表按行分組,指定列中有相同的值
having count(*) = 2 --------- having選定指定的組
select *
from table1, table2
where table1.id *= table2.id -------- 左外部連接,table1中有的而table2中沒有得以null表示
table1.id =* table2.id -------- 右外部連接
select stockname from table1
union [all] -------- union合併查詢結果集,all-保留重複行
select stockname from table2
from table1, table2
where table1.id *= table2.id -------- 左外部連接,table1中有的而table2中沒有得以null表示
table1.id =* table2.id -------- 右外部連接
select stockname from table1
union [all] -------- union合併查詢結果集,all-保留重複行
select stockname from table2
insert
insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx"
value (select Stockname , Stocknumber from Stock_table2)
-------value為select語句
value (select Stockname , Stocknumber from Stock_table2)
-------value為select語句
update
update table_name set Stockname = "xxx" [where Stockid = 3]
Stockname = default
Stockname = null
Stocknumber = Stockname + 4
Stockname = default
Stockname = null
Stocknumber = Stockname + 4
delete
delete from table_name where Stockid = 3
truncate table_name --------- 刪除表中所有行,仍保持表的完整性
drop table table_name --------- 完全刪除表
truncate table_name --------- 刪除表中所有行,仍保持表的完整性
drop table table_name --------- 完全刪除表
alter table -------- 修改資料庫表結構
alter table database.owner.table_name add column_name char(2) null ..
sp_help table_name -------- 顯示表已有特徵
create table table_name (name char(20), age smallint, lname varchar(30))
insert into table_name select -------- 實現刪除列的方法(創建新表)
alter table table_name drop constraint Stockname_default
--------- 刪除Stockname的default約束
sp_help table_name -------- 顯示表已有特徵
create table table_name (name char(20), age smallint, lname varchar(30))
insert into table_name select -------- 實現刪除列的方法(創建新表)
alter table table_name drop constraint Stockname_default
--------- 刪除Stockname的default約束
常用函數(function)
轉換函數
convert(資料類型,值,格式)
統計函數
AVG --求平均值
COUNT --統計數目
MAX --求最大值
MIN --求最小值
SUM --求和
COUNT --統計數目
MAX --求最大值
MIN --求最小值
SUM --求和
AVG
use pangu
select avg(e_wage) as dept_avgWage
from employee
group by dept_id
select avg(e_wage) as dept_avgWage
from employee
group by dept_id
MAX
--求工資最高的員工姓名
use pangu
select e_name
from employee
where e_wage =
(select max(e_wage)
from employee)
use pangu
select e_name
from employee
where e_wage =
(select max(e_wage)
from employee)
STDEV()
--STDEV()函數返回運算式中所有資料的標準差
--STDEVP()
--STDEVP()函數返回總體標準差
--STDEVP()
--STDEVP()函數返回總體標準差
VAR()
--VAR()函數返回運算式中所有值的統計變異數
VARP()
--VARP()函數返回總體變異數
算術函數
三角函數
SIN(float_expression) --返回以弧度表示的角的正弦
COS(float_expression) --返回以弧度表示的角的余弦
TAN(float_expression) --返回以弧度表示的角的正切
COT(float_expression) --返回以弧度表示的角的餘切
COS(float_expression) --返回以弧度表示的角的余弦
TAN(float_expression) --返回以弧度表示的角的正切
COT(float_expression) --返回以弧度表示的角的餘切
反三角函數
ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角
ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角
ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角
ATAN2(float_expression1,float_expression2)
------返回正切是float_expression1 /float_expres-sion2的以弧度表示的角
DEGREES(numeric_expression)
------把弧度轉換為角度返回與運算式相同的資料類型可為
------INTEGER/MONEY/REAL/FLOAT 類型
RADIANS(numeric_expression)
------把角度轉換為弧度返回與運算式相同的資料類型可為
ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角
ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角
ATAN2(float_expression1,float_expression2)
------返回正切是float_expression1 /float_expres-sion2的以弧度表示的角
DEGREES(numeric_expression)
------把弧度轉換為角度返回與運算式相同的資料類型可為
------INTEGER/MONEY/REAL/FLOAT 類型
RADIANS(numeric_expression)
------把角度轉換為弧度返回與運算式相同的資料類型可為
------INTEGER/MONEY/REAL/FLOAT 類型
EXP(float_expression) --返回運算式的指數值
LOG(float_expression) --返回運算式的自然對數值
LOG10(float_expression)--返回運算式的以10 為底的對數值
SQRT(float_expression) --返回運算式的平方根
EXP(float_expression) --返回運算式的指數值
LOG(float_expression) --返回運算式的自然對數值
LOG10(float_expression)--返回運算式的以10 為底的對數值
SQRT(float_expression) --返回運算式的平方根
取近似值函數
CEILING(numeric_expression)
-------返回>=運算式的最小整數返回的資料類型與運算式相同可為
-------INTEGER/MONEY/REAL/FLOAT 類型
FLOOR(numeric_expression)
-------返回<=運算式的最小整數返回的資料類型與運算式相同可為
-------INTEGER/MONEY/REAL/FLOAT 類型
ROUND(numeric_expression)
-------返回以integer_expression 為精度的四捨五入值返回的資料
-------類型與運算式相同可為INTEGER/MONEY/REAL/FLOAT 類型
ABS(numeric_expression)
-------返回運算式的絕對值返回的資料類型與運算式相同可為
-------INTEGER/MONEY/REAL/FLOAT 類型
SIGN(numeric_expression)
-------測試參數的正負號返回0 零值1 正數或-1 負數返回的資料類型
-------與運算式相同可為INTEGER/MONEY/REAL/FLOAT 類型
PI() -------返回值為π 即3.1415926535897936
RAND([integer_expression])
-------用任選的[integer_expression]做種子值得出0-1 間的隨機浮點數
-------返回>=運算式的最小整數返回的資料類型與運算式相同可為
-------INTEGER/MONEY/REAL/FLOAT 類型
FLOOR(numeric_expression)
-------返回<=運算式的最小整數返回的資料類型與運算式相同可為
-------INTEGER/MONEY/REAL/FLOAT 類型
ROUND(numeric_expression)
-------返回以integer_expression 為精度的四捨五入值返回的資料
-------類型與運算式相同可為INTEGER/MONEY/REAL/FLOAT 類型
ABS(numeric_expression)
-------返回運算式的絕對值返回的資料類型與運算式相同可為
-------INTEGER/MONEY/REAL/FLOAT 類型
SIGN(numeric_expression)
-------測試參數的正負號返回0 零值1 正數或-1 負數返回的資料類型
-------與運算式相同可為INTEGER/MONEY/REAL/FLOAT 類型
PI() -------返回值為π 即3.1415926535897936
RAND([integer_expression])
-------用任選的[integer_expression]做種子值得出0-1 間的隨機浮點數
字串函數
ASCII() ------函數返回字元運算式最左端字元的ASCII 碼值
CHAR() ------函數用於將ASCII 碼轉換為字元
------如果沒有輸入0 ~ 255 之間的ASCII 碼值CHAR 函數會返回一個NULL 值
LOWER() ------函數把字串全部轉換為小寫
UPPER() ------函數把字串全部轉換為大寫
STR() ------函數把數值型資料轉換為字元型資料
LTRIM() ------函數把字串頭部的空格去掉
RTRIM() ------函數把字串尾部的空格去掉
LEFT(),RIGHT(),SUBSTRING() --函數返回部分字串
CHARINDEX(),PATINDEX() --函數返回字串中某個指定的子串出現的開始位置
SOUNDEX() ------函數返回一個四位元字元碼
------SOUNDEX函數可用來查找聲音相似的字串但SOUNDEX函數對數位和漢字均只返回0 值
DIFFERENCE() ------函數返回由SOUNDEX 函數返回的兩個字元運算式的值的差異
------0 兩個SOUNDEX 函數返回值的第一個字元不同
------1 兩個SOUNDEX 函數返回值的第一個字元相同
------2 兩個SOUNDEX 函數返回值的第一二個字元相同
------3 兩個SOUNDEX 函數返回值的第一二三個字元相同
------4 兩個SOUNDEX 函數返回值完全相同同
QUOTENAME() ------函數返回被特定字元括起來的字串
CHAR() ------函數用於將ASCII 碼轉換為字元
------如果沒有輸入0 ~ 255 之間的ASCII 碼值CHAR 函數會返回一個NULL 值
LOWER() ------函數把字串全部轉換為小寫
UPPER() ------函數把字串全部轉換為大寫
STR() ------函數把數值型資料轉換為字元型資料
LTRIM() ------函數把字串頭部的空格去掉
RTRIM() ------函數把字串尾部的空格去掉
LEFT(),RIGHT(),SUBSTRING() --函數返回部分字串
CHARINDEX(),PATINDEX() --函數返回字串中某個指定的子串出現的開始位置
SOUNDEX() ------函數返回一個四位元字元碼
------SOUNDEX函數可用來查找聲音相似的字串但SOUNDEX函數對數位和漢字均只返回0 值
DIFFERENCE() ------函數返回由SOUNDEX 函數返回的兩個字元運算式的值的差異
------0 兩個SOUNDEX 函數返回值的第一個字元不同
------1 兩個SOUNDEX 函數返回值的第一個字元相同
------2 兩個SOUNDEX 函數返回值的第一二個字元相同
------3 兩個SOUNDEX 函數返回值的第一二三個字元相同
------4 兩個SOUNDEX 函數返回值完全相同同
QUOTENAME() ------函數返回被特定字元括起來的字串
/**//**//**//*select quotename('abc', '{') quotename('abc')
運行結果如下
運行結果如下
{
{abc} [abc]*/
REPLICATE() ------函數返回一個重複character_expression 指定次數的字串
/**//**//**//*select replicate('abc', 3) replicate( 'abc', -2)
{abc} [abc]*/
REPLICATE() ------函數返回一個重複character_expression 指定次數的字串
/**//**//**//*select replicate('abc', 3) replicate( 'abc', -2)
運行結果如下
abcabcabc NULL*/
REVERSE() ------函數將指定的字串的字元排列順序顛倒
REPLACE() ------函數返回被替換了指定子串的字串
/**//**//**//*select replace('abc123g', '123', 'def')
REVERSE() ------函數將指定的字串的字元排列順序顛倒
REPLACE() ------函數返回被替換了指定子串的字串
/**//**//**//*select replace('abc123g', '123', 'def')
運行結果如下
abcdefg*/
abcdefg*/
SPACE() ------函數返回一個有指定長度的空白字串
STUFF() ------函數用另一子串替換字串指定位置長度的子串
STUFF() ------函數用另一子串替換字串指定位置長度的子串
資料類型轉換函數
CAST() 函數語法如下
CAST() ( AS [ length ])
CONVERT() 函數語法如下
CONVERT() ([ length ], [, style])
select cast(100+99 as char) convert(varchar(12), getdate())
CAST() ( AS [ length ])
CONVERT() 函數語法如下
CONVERT() ([ length ], [, style])
select cast(100+99 as char) convert(varchar(12), getdate())
運行結果如下
199 Jan 15 2000
199 Jan 15 2000
日期函數
DAY() ------函數返回date_expression 中的日期值
MONTH() ------函數返回date_expression 中的月份值
YEAR() ------函數返回date_expression 中的年份值
DATEADD( , ,)
-----函數返回指定日期date 加上指定的額外日期間隔number 產生的新日期
DATEDIFF( , ,)
-----函數返回兩個指定日期在datepart 方面的不同之處
MONTH() ------函數返回date_expression 中的月份值
YEAR() ------函數返回date_expression 中的年份值
DATEADD( , ,)
-----函數返回指定日期date 加上指定的額外日期間隔number 產生的新日期
DATEDIFF( , ,)
-----函數返回兩個指定日期在datepart 方面的不同之處
DATENAME( , ------函數以字串的形式返回日期的指定部分
DATEPART( , ------函數以整數值的形式返回日期的指定部分
GETDATE() ------函數以DATETIME 的缺省格式返回系統當前的日期和時間
DATEPART( , ------函數以整數值的形式返回日期的指定部分
GETDATE() ------函數以DATETIME 的缺省格式返回系統當前的日期和時間
系統函數
APP_NAME() ------函數返回當前執行的應用程式的名稱
COALESCE() -----函數返回眾多運算式中第一個非NULL 運算式的值
COL_LENGTH(<'table_name'>, <'column_name'> ----函數返回表中指定欄位的長度值
COL_NAME(, ----函數返回表中指定欄位的名稱即列名
DATALENGTH() -----函數返回資料運算式的資料的實際長度
DB_ID(['database_name']) ------函數返回資料庫的編號
DB_NAME(database_id) ------函數返回資料庫的名稱
HOST_ID() -----函數返回伺服器端電腦的名稱
HOST_NAME() -----函數返回伺服器端電腦的名稱
IDENTITY([, seed increment]) [AS column_name])
--IDENTITY() 函數只在SELECT INTO 語句中使用用於插入一個identity column列到新表中
/**//**//**//*select identity(int, 1, 1) as column_name
into newtable
from oldtable*/
COALESCE() -----函數返回眾多運算式中第一個非NULL 運算式的值
COL_LENGTH(<'table_name'>, <'column_name'> ----函數返回表中指定欄位的長度值
COL_NAME(, ----函數返回表中指定欄位的名稱即列名
DATALENGTH() -----函數返回資料運算式的資料的實際長度
DB_ID(['database_name']) ------函數返回資料庫的編號
DB_NAME(database_id) ------函數返回資料庫的名稱
HOST_ID() -----函數返回伺服器端電腦的名稱
HOST_NAME() -----函數返回伺服器端電腦的名稱
IDENTITY([, seed increment]) [AS column_name])
--IDENTITY() 函數只在SELECT INTO 語句中使用用於插入一個identity column列到新表中
/**//**//**//*select identity(int, 1, 1) as column_name
into newtable
from oldtable*/
ISDATE() ----函數判斷所給定的運算式是否為合理日期
ISNULL(, --函數將運算式中的NULL 值用指定值替換
ISNUMERIC() ----函數判斷所給定的運算式是否為合理的數值
NEWID() ----函數返回一個UNIQUEIDENTIFIER 類型的數值
NULLIF(,
----NULLIF 函數在expression1 與expression2 相等時返回NULL 值若不相等時則返回xpression1 的值 *******************Transact_SQL********************
ISNULL(, --函數將運算式中的NULL 值用指定值替換
ISNUMERIC() ----函數判斷所給定的運算式是否為合理的數值
NEWID() ----函數返回一個UNIQUEIDENTIFIER 類型的數值
NULLIF(,
----NULLIF 函數在expression1 與expression2 相等時返回NULL 值若不相等時則返回xpression1 的值 *******************Transact_SQL********************
--語 句 功 能
--資料操作
SELECT --從資料庫表中檢索資料行和列
INSERT --向資料庫表添加新資料行
DELETE --從資料庫表中刪除資料行
UPDATE --更新資料庫表中的資料
--資料定義
CREATE TABLE --創建一個資料庫表
DROP TABLE --從資料庫中刪除表
ALTER TABLE --修改資料庫表結構
CREATE VIEW --創建一個視圖
DROP VIEW --從資料庫中刪除視圖
CREATE INDEX --為資料庫表創建一個索引
DROP INDEX --從資料庫中刪除索引
CREATE PROCEDURE --創建一個存儲過程
DROP PROCEDURE --從資料庫中刪除存儲過程
CREATE TRIGGER --創建一個觸發器
DROP TRIGGER --從資料庫中刪除觸發器
CREATE SCHEMA --向資料庫添加一個新模式
DROP SCHEMA --從資料庫中刪除一個模式
CREATE DOMAIN --創建一個資料值域
ALTER DOMAIN --改變域定義
DROP DOMAIN --從資料庫中刪除一個域
--資料控制
GRANT --授予用戶訪問許可權
DENY --拒絕用戶訪問
REVOKE --解除用戶訪問許可權
--事務控制
COMMIT --結束當前事務
ROLLBACK --中止當前事務
SET TRANSACTION --定義當前事務資料訪問特徵
--程式化SQL
DECLARE --為查詢設定游標
EXPLAN --為查詢描述資料訪問計畫
OPEN --檢索查詢結果打開一個游標
FETCH --檢索一行查詢結果
CLOSE --關閉游標
PREPARE --為動態執行準備SQL 語句
EXECUTE --動態地執行SQL 語句
DESCRIBE --描述準備好的查詢
--資料操作
SELECT --從資料庫表中檢索資料行和列
INSERT --向資料庫表添加新資料行
DELETE --從資料庫表中刪除資料行
UPDATE --更新資料庫表中的資料
--資料定義
CREATE TABLE --創建一個資料庫表
DROP TABLE --從資料庫中刪除表
ALTER TABLE --修改資料庫表結構
CREATE VIEW --創建一個視圖
DROP VIEW --從資料庫中刪除視圖
CREATE INDEX --為資料庫表創建一個索引
DROP INDEX --從資料庫中刪除索引
CREATE PROCEDURE --創建一個存儲過程
DROP PROCEDURE --從資料庫中刪除存儲過程
CREATE TRIGGER --創建一個觸發器
DROP TRIGGER --從資料庫中刪除觸發器
CREATE SCHEMA --向資料庫添加一個新模式
DROP SCHEMA --從資料庫中刪除一個模式
CREATE DOMAIN --創建一個資料值域
ALTER DOMAIN --改變域定義
DROP DOMAIN --從資料庫中刪除一個域
--資料控制
GRANT --授予用戶訪問許可權
DENY --拒絕用戶訪問
REVOKE --解除用戶訪問許可權
--事務控制
COMMIT --結束當前事務
ROLLBACK --中止當前事務
SET TRANSACTION --定義當前事務資料訪問特徵
--程式化SQL
DECLARE --為查詢設定游標
EXPLAN --為查詢描述資料訪問計畫
OPEN --檢索查詢結果打開一個游標
FETCH --檢索一行查詢結果
CLOSE --關閉游標
PREPARE --為動態執行準備SQL 語句
EXECUTE --動態地執行SQL 語句
DESCRIBE --描述準備好的查詢
---局部變數
declare @id char(10)
--set @id = '10010001'
select @id = '10010001'
declare @id char(10)
--set @id = '10010001'
select @id = '10010001'
---總體變數
---必須以@@開頭
---必須以@@開頭
--IF ELSE
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
print 'x > y' --列印字串'x > y'
else if @y > @z
print 'y > z'
else print 'z > y'
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
print 'x > y' --列印字串'x > y'
else if @y > @z
print 'y > z'
else print 'z > y'
--CASE
use pangu
update employee
set e_wage =
case
when job_level = ’1’ then e_wage*1.08
when job_level = ’2’ then e_wage*1.07
when job_level = ’3’ then e_wage*1.06
else e_wage*1.05
end
use pangu
update employee
set e_wage =
case
when job_level = ’1’ then e_wage*1.08
when job_level = ’2’ then e_wage*1.07
when job_level = ’3’ then e_wage*1.06
else e_wage*1.05
end
--WHILE CONTINUE BREAK
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
print @x --列印變數x 的值
while @y < 3
begin
select @c = 100*@x + @y
print @c --列印變數c 的值
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
print @x --列印變數x 的值
while @y < 3
begin
select @c = 100*@x + @y
print @c --列印變數c 的值
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end
--WAITFOR
--例 等待1 小時2 分零3 秒後才執行SELECT 語句
waitfor delay ’01:02:03’
select * from employee
--例 等到晚上11 點零8 分後才執行SELECT 語句
waitfor time ’23:08:00’
select * from employee
--例 等待1 小時2 分零3 秒後才執行SELECT 語句
waitfor delay ’01:02:03’
select * from employee
--例 等到晚上11 點零8 分後才執行SELECT 語句
waitfor time ’23:08:00’
select * from employee
***SELECT***
select *(列名) from table_name(表名) where column_name operator value
ex:(宿主)
select * from stock_information where stockid = str(nid)
stockname = 'str_name'
stockname like '% find this %'
stockname like '[a-zA-Z]%' --------- ([]指定值的範圍)
stockname like '[^F-M]%' --------- (^排除指定範圍)
--------- 只能在使用like關鍵字的where子句中使用通配符)
or stockpath = 'stock_path'
or stocknumber < 1000
and stockindex = 24
not stocksex = 'man'
stocknumber between 20 and 100
stocknumber in(10,20,30)
order by stockid desc(asc) --------- 排序,desc-降冪,asc-昇冪
order by 1,2 --------- by列號
stockname = (select stockname from stock_information where stockid = 4)
--------- 子查詢
--------- 除非能確保內層select只返回一個行的值,
--------- 否則應在外層where子句中用一個in限定符
select distinct column_name form table_name --------- distinct指定檢索獨有的列值,不重複
select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name
select stockname , "stocknumber" = count(*) from table_name group by stockname
--------- group by 將表按行分組,指定列中有相同的值
having count(*) = 2 --------- having選定指定的組
select *
from table1, table2
where table1.id *= table2.id -------- 左外部連接,table1中有的而table2中沒有得以null表示
table1.id =* table2.id -------- 右外部連接
ex:(宿主)
select * from stock_information where stockid = str(nid)
stockname = 'str_name'
stockname like '% find this %'
stockname like '[a-zA-Z]%' --------- ([]指定值的範圍)
stockname like '[^F-M]%' --------- (^排除指定範圍)
--------- 只能在使用like關鍵字的where子句中使用通配符)
or stockpath = 'stock_path'
or stocknumber < 1000
and stockindex = 24
not stocksex = 'man'
stocknumber between 20 and 100
stocknumber in(10,20,30)
order by stockid desc(asc) --------- 排序,desc-降冪,asc-昇冪
order by 1,2 --------- by列號
stockname = (select stockname from stock_information where stockid = 4)
--------- 子查詢
--------- 除非能確保內層select只返回一個行的值,
--------- 否則應在外層where子句中用一個in限定符
select distinct column_name form table_name --------- distinct指定檢索獨有的列值,不重複
select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name
select stockname , "stocknumber" = count(*) from table_name group by stockname
--------- group by 將表按行分組,指定列中有相同的值
having count(*) = 2 --------- having選定指定的組
select *
from table1, table2
where table1.id *= table2.id -------- 左外部連接,table1中有的而table2中沒有得以null表示
table1.id =* table2.id -------- 右外部連接
select stockname from table1
union [all] ----- union合併查詢結果集,all-保留重複行
select stockname from table2
union [all] ----- union合併查詢結果集,all-保留重複行
select stockname from table2
***insert***
insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")
value (select Stockname , Stocknumber from Stock_table2)---value為select語句
value (select Stockname , Stocknumber from Stock_table2)---value為select語句
***update***
update table_name set Stockname = "xxx" [where Stockid = 3]
Stockname = default
Stockname = null
Stocknumber = Stockname + 4
Stockname = default
Stockname = null
Stocknumber = Stockname + 4
***delete***
delete from table_name where Stockid = 3
truncate table_name ----------- 刪除表中所有行,仍保持表的完整性
drop table table_name --------------- 完全刪除表
truncate table_name ----------- 刪除表中所有行,仍保持表的完整性
drop table table_name --------------- 完全刪除表
***alter table*** --- 修改資料庫表結構
alter table database.owner.table_name add column_name char(2) null ..
sp_help table_name ---- 顯示表已有特徵
create table table_name (name char(20), age smallint, lname varchar(30))
insert into table_name select ----- 實現刪除列的方法(創建新表)
alter table table_name drop constraint Stockname_default ---- 刪除Stockname的default約束
***function(/**//*常用函數*/)***
sp_help table_name ---- 顯示表已有特徵
create table table_name (name char(20), age smallint, lname varchar(30))
insert into table_name select ----- 實現刪除列的方法(創建新表)
alter table table_name drop constraint Stockname_default ---- 刪除Stockname的default約束
***function(/**//*常用函數*/)***
----統計函數----
AVG --求平均值
COUNT --統計數目
MAX --求最大值
MIN --求最小值
SUM --求和
AVG --求平均值
COUNT --統計數目
MAX --求最大值
MIN --求最小值
SUM --求和
--AVG
use pangu
select avg(e_wage) as dept_avgWage
from employee
group by dept_id
use pangu
select avg(e_wage) as dept_avgWage
from employee
group by dept_id
--MAX
--求工資最高的員工姓名
use pangu
select e_name
from employee
where e_wage =
(select max(e_wage)
from employee)
--求工資最高的員工姓名
use pangu
select e_name
from employee
where e_wage =
(select max(e_wage)
from employee)
--STDEV()
--STDEV()函數返回運算式中所有資料的標準差
--STDEVP()
--STDEVP()函數返回總體標準差
--STDEVP()函數返回總體標準差
--VAR()
--VAR()函數返回運算式中所有值的統計變異數
--VAR()函數返回運算式中所有值的統計變異數
--VARP()
--VARP()函數返回總體變異數
--VARP()函數返回總體變異數
----算術函數----
/**//***三角函數***/
SIN(float_expression) --返回以弧度表示的角的正弦
COS(float_expression) --返回以弧度表示的角的余弦
TAN(float_expression) --返回以弧度表示的角的正切
COT(float_expression) --返回以弧度表示的角的餘切
/**//***反三角函數***/
ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角
ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角
ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角
ATAN2(float_expression1,float_expression2)
--返回正切是float_expression1 /float_expres-sion2的以弧度表示的角
DEGREES(numeric_expression)
--把弧度轉換為角度返回與運算式相同的資料類型可為
--INTEGER/MONEY/REAL/FLOAT 類型
RADIANS(numeric_expression) --把角度轉換為弧度返回與運算式相同的資料類型可為
--INTEGER/MONEY/REAL/FLOAT 類型
EXP(float_expression) --返回運算式的指數值
LOG(float_expression) --返回運算式的自然對數值
LOG10(float_expression)--返回運算式的以10 為底的對數值
SQRT(float_expression) --返回運算式的平方根
/**//***取近似值函數***/
CEILING(numeric_expression) --返回>=運算式的最小整數返回的資料類型與運算式相同可為
--INTEGER/MONEY/REAL/FLOAT 類型
FLOOR(numeric_expression) --返回<=運算式的最小整數返回的資料類型與運算式相同可為
--INTEGER/MONEY/REAL/FLOAT 類型
ROUND(numeric_expression) --返回以integer_expression 為精度的四捨五入值返回的資料
--類型與運算式相同可為INTEGER/MONEY/REAL/FLOAT 類型
ABS(numeric_expression) --返回運算式的絕對值返回的資料類型與運算式相同可為
--INTEGER/MONEY/REAL/FLOAT 類型
SIGN(numeric_expression) --測試參數的正負號返回0 零值1 正數或-1 負數返回的資料類型
--與運算式相同可為INTEGER/MONEY/REAL/FLOAT 類型
PI() --返回值為π 即3.1415926535897936
RAND([integer_expression]) --用任選的[integer_expression]做種子值得出0-1 間的隨機浮點數
SIN(float_expression) --返回以弧度表示的角的正弦
COS(float_expression) --返回以弧度表示的角的余弦
TAN(float_expression) --返回以弧度表示的角的正切
COT(float_expression) --返回以弧度表示的角的餘切
/**//***反三角函數***/
ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角
ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角
ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角
ATAN2(float_expression1,float_expression2)
--返回正切是float_expression1 /float_expres-sion2的以弧度表示的角
DEGREES(numeric_expression)
--把弧度轉換為角度返回與運算式相同的資料類型可為
--INTEGER/MONEY/REAL/FLOAT 類型
RADIANS(numeric_expression) --把角度轉換為弧度返回與運算式相同的資料類型可為
--INTEGER/MONEY/REAL/FLOAT 類型
EXP(float_expression) --返回運算式的指數值
LOG(float_expression) --返回運算式的自然對數值
LOG10(float_expression)--返回運算式的以10 為底的對數值
SQRT(float_expression) --返回運算式的平方根
/**//***取近似值函數***/
CEILING(numeric_expression) --返回>=運算式的最小整數返回的資料類型與運算式相同可為
--INTEGER/MONEY/REAL/FLOAT 類型
FLOOR(numeric_expression) --返回<=運算式的最小整數返回的資料類型與運算式相同可為
--INTEGER/MONEY/REAL/FLOAT 類型
ROUND(numeric_expression) --返回以integer_expression 為精度的四捨五入值返回的資料
--類型與運算式相同可為INTEGER/MONEY/REAL/FLOAT 類型
ABS(numeric_expression) --返回運算式的絕對值返回的資料類型與運算式相同可為
--INTEGER/MONEY/REAL/FLOAT 類型
SIGN(numeric_expression) --測試參數的正負號返回0 零值1 正數或-1 負數返回的資料類型
--與運算式相同可為INTEGER/MONEY/REAL/FLOAT 類型
PI() --返回值為π 即3.1415926535897936
RAND([integer_expression]) --用任選的[integer_expression]做種子值得出0-1 間的隨機浮點數
----字串函數----
ASCII() --函數返回字元運算式最左端字元的ASCII 碼值
CHAR() --函數用於將ASCII 碼轉換為字元
--如果沒有輸入0 ~ 255 之間的ASCII 碼值CHAR 函數會返回一個NULL 值
LOWER() --函數把字串全部轉換為小寫
UPPER() --函數把字串全部轉換為大寫
STR() --函數把數值型資料轉換為字元型資料
LTRIM() --函數把字串頭部的空格去掉
RTRIM() --函數把字串尾部的空格去掉
LEFT(),RIGHT(),SUBSTRING() --函數返回部分字串
CHARINDEX(),PATINDEX() --函數返回字串中某個指定的子串出現的開始位置
SOUNDEX() --函數返回一個四位元字元碼
--SOUNDEX函數可用來查找聲音相似的字串但SOUNDEX函數對數位和漢字均只返回0 值
DIFFERENCE() --函數返回由SOUNDEX 函數返回的兩個字元運算式的值的差異
--0 兩個SOUNDEX 函數返回值的第一個字元不同
--1 兩個SOUNDEX 函數返回值的第一個字元相同
--2 兩個SOUNDEX 函數返回值的第一二個字元相同
--3 兩個SOUNDEX 函數返回值的第一二三個字元相同
--4 兩個SOUNDEX 函數返回值完全相同
QUOTENAME() --函數返回被特定字元括起來的字串
/**//*select quotename('abc', '{') quotename('abc')
運行結果如下
----------------------------------{
{abc} [abc]*/
/**//*select quotename('abc', '{') quotename('abc')
運行結果如下
----------------------------------{
{abc} [abc]*/
REPLICATE() --函數返回一個重複character_expression 指定次數的字串
/**//*select replicate('abc', 3) replicate( 'abc', -2)
運行結果如下
----------- -----------
abcabcabc NULL*/
/**//*select replicate('abc', 3) replicate( 'abc', -2)
運行結果如下
----------- -----------
abcabcabc NULL*/
REVERSE() --函數將指定的字串的字元排列順序顛倒
REPLACE() --函數返回被替換了指定子串的字串
/**//*select replace('abc123g', '123', 'def')
運行結果如下
----------- -----------
abcdefg*/
REPLACE() --函數返回被替換了指定子串的字串
/**//*select replace('abc123g', '123', 'def')
運行結果如下
----------- -----------
abcdefg*/
SPACE() --函數返回一個有指定長度的空白字串
STUFF() --函數用另一子串替換字串指定位置長度的子串
STUFF() --函數用另一子串替換字串指定位置長度的子串
----資料類型轉換函數----
CAST() 函數語法如下
CAST() (
CONVERT() 函數語法如下
CONVERT() (
select cast(100+99 as char) convert(varchar(12), getdate())
運行結果如下
------------------------------ ------------
199 Jan 15 2000
運行結果如下
------------------------------ ------------
199 Jan 15 2000
----日期函數----
DAY() --函數返回date_expression 中的日期值
MONTH() --函數返回date_expression 中的月份值
YEAR() --函數返回date_expression 中的年份值
DATEADD( , ,)
--函數返回指定日期date 加上指定的額外日期間隔number 產生的新日期
DATEDIFF( , ,)
--函數返回兩個指定日期在datepart 方面的不同之處
DATENAME( , ) --函數以字串的形式返回日期的指定部分
DATEPART( , ) --函數以整數值的形式返回日期的指定部分
GETDATE() --函數以DATETIME 的缺省格式返回系統當前的日期和時間
DAY() --函數返回date_expression 中的日期值
MONTH() --函數返回date_expression 中的月份值
YEAR() --函數返回date_expression 中的年份值
DATEADD(
--函數返回指定日期date 加上指定的額外日期間隔number 產生的新日期
DATEDIFF(
--函數返回兩個指定日期在datepart 方面的不同之處
DATENAME(
DATEPART(
GETDATE() --函數以DATETIME 的缺省格式返回系統當前的日期和時間
----系統函數----
APP_NAME() --函數返回當前執行的應用程式的名稱
COALESCE() --函數返回眾多運算式中第一個非NULL 運算式的值
COL_LENGTH(<'table_name'>, <'column_name'>) --函數返回表中指定欄位的長度值
COL_NAME(, ) --函數返回表中指定欄位的名稱即列名
DATALENGTH() --函數返回資料運算式的資料的實際長度
DB_ID(['database_name']) --函數返回資料庫的編號
DB_NAME(database_id) --函數返回資料庫的名稱
HOST_ID() --函數返回伺服器端電腦的名稱
HOST_NAME() --函數返回伺服器端電腦的名稱
IDENTITY([, seed increment]) [AS column_name])
--IDENTITY() 函數只在SELECT INTO 語句中使用用於插入一個identity column列到新表中
/**//**//**//*select identity(int, 1, 1) as column_name
into newtable
from oldtable*/
ISDATE() --函數判斷所給定的運算式是否為合理日期
ISNULL(, ) --函數將運算式中的NULL 值用指定值替換
ISNUMERIC() --函數判斷所給定的運算式是否為合理的數值
NEWID() --函數返回一個UNIQUEIDENTIFIER 類型的數值
NULLIF(, )
--NULLIF 函數在expression1 與expression2 相等時返回NULL 值若不相等時則返回expression1 的值
APP_NAME() --函數返回當前執行的應用程式的名稱
COALESCE() --函數返回眾多運算式中第一個非NULL 運算式的值
COL_LENGTH(<'table_name'>, <'column_name'>) --函數返回表中指定欄位的長度值
COL_NAME(
DATALENGTH() --函數返回資料運算式的資料的實際長度
DB_ID(['database_name']) --函數返回資料庫的編號
DB_NAME(database_id) --函數返回資料庫的名稱
HOST_ID() --函數返回伺服器端電腦的名稱
HOST_NAME() --函數返回伺服器端電腦的名稱
IDENTITY(
--IDENTITY() 函數只在SELECT INTO 語句中使用用於插入一個identity column列到新表中
/**//**//**//*select identity(int, 1, 1) as column_name
into newtable
from oldtable*/
ISDATE() --函數判斷所給定的運算式是否為合理日期
ISNULL(
ISNUMERIC() --函數判斷所給定的運算式是否為合理的數值
NEWID() --函數返回一個UNIQUEIDENTIFIER 類型的數值
NULLIF(
--NULLIF 函數在expression1 與expression2 相等時返回NULL 值若不相等時則返回expression1 的值
訂閱:
文章 (Atom)



