SQLServer---查詢過程中的資料類型轉化

來源:互聯網
上載者:User

標籤:convert cast 查詢中資料類型

SQLServer---查詢過程中的資料類型轉化

 

         前兩天在維護某市人才服務中心的人事檔案管理系統的時候,發現了這個一個問題新的檔案編號規則是日期+已有檔案最大編號+1(六位,不足六位在中間補零)(((CONVERT([varchar](9),[createTime],(112))+‘‘)+right((100000000000.)+[num],(6))))例如:20150511007841。說實話真的不清楚當時為什麼會用最大編號,而不是用總記錄數+1(不存在刪除資料),接下來說說遇到的問題,以及解決方案吧。


         問題再現

         查詢表中總記錄數+1

select count(number)+1 from T_UniversityStudent

         執行結果


         查詢表中最大資料+1

select MAX(number)+1fromT_UniversityStudent

         執行結果


         問題原因

         為什麼明明資料庫中有了7840條資料,而資料記錄是每次加1,那為什麼會造成這中問題呢?

         我想有經驗的開發人員,已經知道了,是不是資料類型有問題了。在字串的大小比較中9>1000是成立的,也就是說999>7840也是正確的。

我們通過排序來驗證是否上述的說法是正確的

select number from T_UniversityStudentorderbynumber asc

         執行結果


         問題解決

         既然我們已經知道了是欄位設計的過程中存在問題,那麼我們最簡單的就是講欄位的資料類型改了,但由於我們不瞭解修改資料類型之後會不會造成不良的後果,因此這種方法並不是最好的。

         這時我們就能用到cast函數和convert函數了。

         具體的用法如下

         通過將varchar類型轉化成int類型排序(使用convert函數)

select number from T_UniversityStudentorderbyconvert(int,number)asc

         執行結果


         將查詢欄位中的varchar轉換成int

select MAX(cast(numberasint))+1fromT_UniversityStudent

         執行結果


         需要注意的是convert函數只能運用在SQLServer中而cast函數可以用在oracle和SQL Server中,至於其他資料庫中是否支援還需要讀者自己嘗試了。

SQLServer---查詢過程中的資料類型轉化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.