讀《程序員的SQL金典》[2]--函數

一、數學函數


1.RAND

SELECT RAND () ---0.302870228294199

取0-1之間的隨機小數。?

2.小數取整

  • CEILINT(data)舍掉小數部分并向上取整。
  • FLOOR(data)舍掉小數部分并向下取整。
SELECT TOP 3 FWeight, CEILING(FWeight ),FLOOR( FWeight) FROM T_Person
  • Round(m,d):四舍五入對小數進行取整。

參數說明:m為帶處理的數據,d為四舍五入時保留的小數位數,為負數時表示對整數進行四舍五入。

SELECT TOP 3 FWeight, ROUND(FWeight ,2), ROUND(FWeight ,-1) FROM T_Person

結果:

FWeight???? (無列名)???? (無列名)
56.67???? 56.67???? 60.00
36.17???? 36.17???? 40.00
40.33???? 40.33???? 40.00

3.SIGN():求符號

SELECT FWeight ,SIGN( FWeight-50 )as '>50' FROM T_Person

結果:

FWeight???? >50
56.67???? 1.00
36.17???? -1.00

4.取余:

在SQL Server中,使用百分號%來實現取余操作。

SELECT FWeight ,FWeight% 10 FROM T_Person

結果:

FWeight???? (無列名)
56.67???? 6.67
36.17???? 6.17
40.33???? 0.33

二、字符串函數

1.LEN(str):計算字符串長度。

2.去除空格

  • LTRIM(str):去掉字符串左側空格。
  • RTRIM(str):去掉字符串右側空格。
SELECT ' HELLO ' ,LEN( '  HELLO  '),LEN (LTRIM( '  HELLO  ')),LEN (RTRIM( LTRIM('  HELLO  ' )))

結果:

(無列名)???? (無列名)???? (無列名)???? (無列名)
HELLO???????????? 7??????????????? 5??????????????? 5

3.截取子串

  • SUBSTRING(str,start,length):取子字符串。其中start從1開始計算,length為子串長度。
  • LEFT(str,length):從最左側開始截取子串。
  • RIGHT(str,length):從最右側開始截取子串。
SELECT FName ,SUBSTRING( FName,2 ,2),LEFT( FName,2 ) as l,RIGHT( FName,2 ) as r FROM T_Person

結果:

FName???? (無列名)???? l???? r
Lily???? il???? Li???? ly
Kelly???? el???? Ke???? ly
Sam???? am???? Sa???? am

4.字符串替換

REPLACE(str,old,new):str為要替換的原字符串,old為要被替換的字符串部分,new是用來替換的新字符串。

SELECT LEN (' HELLO '), LEN(REPLACE (' HELLO ', ' ','' )) --結果6,5

5.ASCII碼

  • ASCII(char)計算字符的ASCII碼,如果參數是一個字符串,則返回第一個字母的ASCII碼。
  • CHAR(num)正好相反,是根據ASCII碼數值計算對應的字符。
SELECT ASCII ('A'), ASCII('ANY' ),CHAR( 90)--65,65,Z

6.發音匹配度 DIFFERENCE

在SQL Server中使用DIFFERENCE方法查詢兩個字符串的發音相似度。該方法計算兩個字符串的發音特征值并進行比較,然后返回一個0-4之間的整數,這個數字越大表示兩個字符串發音越相似。

例如:

SELECT FName FROM T_Person WHERE DIFFERENCE( FName,'Tony' )>2

三、日期時間函數

1.GETDATE()--當前時間

SQL Server中取得當前時間的函數GETDATE(),可以使用CONVERT函數對其格式進行處理。

SELECT GETDATE () --2014-02-17 12:44:39.933 
SELECT CONVERT (VARCHAR( 50),GETDATE (),101) AS NOWDATE --02/17/2014 
SELECT CONVERT (VARCHAR( 50),GETDATE (),108) AS NOWDATE --12:44:39

2.DATEADD()--日期增減

DATEADD(datepart,number,date):date為要計算的日期,number為加減日期數,datepart可以理解為加減的單位。

Image

例如:

SELECT FBirthDay ,DATEADD( YEAR,1 ,FBirthDay) FROM T_Person 
SELECT FBirthDay ,DATEADD( QUARTER,2 ,FBirthDay) FROM T_Person 
SELECT FBirthDay ,DATEADD( WEEK,-2 ,FBirthDay) FROM T_Person

3.DATEDIFF()--日期差額

DATEDIFF(datedepart,startdate,enddate):其中datedepart含義同DATEADD參數,startdate和enddate為相減的兩個日期。

SELECT FBirthDay ,FRegDay, DATEDIFF(YEAR ,FBirthDay, FRegDay) AS UserAge FROM T_Person

結果:

FBirthDay????????????????????????????????? FRegDay????????????????????????????? UserAge
1981-03-22 00:00:00.000???? 1998-05-01 00:00:00.000???? 17
1987-01-18 00:00:00.000???? 1999-08-21 00:00:00.000???? 12
1987-11-08 00:00:00.000???? 2001-09-18 00:00:00.000???? 14

4.DATENAME()--計算日期名稱

DATENAME(datedepart,date):datedepart參數同DATEADD,date為要計算的目標日期。

SELECT GETDATE () AS NOW, DATENAME(YEAR ,GETDATE()) AS YEAR,DATENAME (DAY, GETDATE()) AS 日期 ,DATENAME( WEEKDAY,GETDATE ()) AS WEEKDAY,DATENAME (QUARTER, GETDATE()) AS 季度

結果:

NOW??????????????????????????????????????? YEAR???? 日期???? WEEKDAY???? 季度
2014-02-17 13:57:56.127???? 2014???? 17??????? 星期一?????????????? 1

5.DATEPART()--取得日期指定部分

DATEPART(datedepart,date):datedepart參數同DATEADD,date為要計算的目標日期。該方法和DATENAME類似,不過DATEPART返回值是數字,而DATENAME盡量返回的名稱。

SELECT GETDATE () AS NOW, DATEPART(YEAR ,GETDATE()) AS YEAR,DATEPART (DAY, GETDATE()) AS 日期 ,DATEPART( WEEKDAY,GETDATE ()) AS WEEKDAY, DATEPART(QUARTER ,GETDATE()) AS 季度

四、其他函數

1. 類型轉換

  • CAST(exp AS datetype)
  • CONVERT(datetype,exp)
SELECT FIdNumber ,CAST(RIGHT( FIdNumber,4 ) AS INT), Convert(INT ,RIGHT(FIdNumber, 4))%2 FROM T_Person

結果:

FIdNumber???? (無列名)???? (無列名)
123456789120???? 9120???? 0
123456789121???? 9121???? 1
123456789122???? 9122???? 0

2.空值處理

①COALESCE(exp,val1,val2....):參數個數不固定。如果exp為null則返回val1,如果val1為null則返回val2...以此類推。如果所有值都為null,則返回null。

例如:

SELECT FBirthDay ,FRegDay, COALESCE(FBirthDay ,FRegDay, '1900-1-1') FROM T_Person

結果:

FBirthDay???????????????????????????????? FRegDay????????????????????????????????? (無列名)
1982-07-12 00:00:00.000???? 2000-03-01 00:00:00.000???? 1982-07-12 00:00:00.000
1983-02-16 00:00:00.000???? 1998-05-01 00:00:00.000???? 1983-02-16 00:00:00.000
NULL??????????????????????????????????????? 1999-03-01 00:00:00.000???? 1999-03-01 00:00:00.000
NULL??????????????????????????????????????? NULL???????????????????????????????????????? 1900-01-01 00:00:00.000
1972-07-18 00:00:00.000???? 1995-06-19 00:00:00.000???? 1972-07-18 00:00:00.000

②ISNULL(exp1,exp2):如果exp1值為NULL,則返回exp2.

例如:

SELECT FBirthDay ,FRegDay, ISNULL(FBirthDay ,FRegDay) FROM T_Person

結果:

FBirthDay??????????????????????????????? FRegDay????????????????????????????????????? (無列名)
1982-07-12 00:00:00.000???? 2000-03-01 00:00:00.000???? 1982-07-12 00:00:00.000
1983-02-16 00:00:00.000???? 1998-05-01 00:00:00.000???? 1983-02-16 00:00:00.000
NULL???????????????????????????????????????? 1999-03-01 00:00:00.000???? 1999-03-01 00:00:00.000
NULL???????????????????????????????????????? NULL???????????????????????????????????????? NULL
1972-07-18 00:00:00.000???? 1995-06-19 00:00:00.000???? 1972-07-18 00:00:00.000

③NULLIF(exp1,exp2):

如果exp1等于exp2,則返回NULL;否則返回exp1.

實例:

SELECT NULLIF (1, 1),NULLIF (1, 2),NULLIF (1,NULL)  --返回NULL,1,1

3.SQL Server獨有函數

①PATINDEX()--可以使用通配符模糊查詢某字符串出現的位置,功能比CHARINDEX強大。

例如:

SELECT FName ,PATINDEX( '%_i%',FName ) FROM T_Person

結果:

Image(1)



②REPLICATE(str,count):將一個字符串str重復count次。

SPACE(N):將空格重復N次。

例如:

SELECT FName ,REPLICATE( FName,3 ),FNAME+ SPACE(5 )+FNAME FROM T_Person

Image(2)

③REVERSE(str):返回字符串的倒序。

④APP_NAME():當前應用程序名稱;HOST_NAME():返回工作站名;CURRENT_USER:返回當前登錄用戶名。




? ? 本文轉自 陳敬(Cathy) 博客園博客,原文鏈接:http://www.cnblogs.com/janes/p/3574025.html,如需轉載請自行聯系原作者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454502.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454502.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454502.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

html div模塊前留空白,html – 3個DIV彼此相鄰,中間填充空白

您好我想問你如何將3 DIV放在一起,而中間一個填補第一和第三DIV之間的空白.我想在第一個NAD第三個DIV中有動態按鈕,我需要中間DIV來填充第一和第三個DIV之間的空間.我會破壞純CSS / HTML(沒有JavaScript)這是我的嘗試:http://jsfiddle.net/4smx3627/#wrapper{height…

mplayer安裝記錄 源碼分析

mplayer源碼下載地址: http://www.mplayerhq.hu/MPlayer/releases/ 下載最新的MPlayer-1.0rc4 #mkdir /usr/local/mplayer #mkdir /usr/local/codecs #cd MPlayer-1.0rc4 #./configure --prefix/usr/local/mplayer --codecsdir/usr/local/ codecs --langua…

python人臉識別代碼百度ai_python百度AI人臉識別API測試

1、注冊賬號 2、創建應用 3、得到AK和SK 4、用AK SK獲取access_token 可用下面的代碼: #!/usr/bin/python3.5 # encoding:utf-8 import requests # client_id 你的AK client_secret 你的SK host https://aip.baidubce.com/oauth/2.0/token?grant_typeclient_crede…

Flask 第三方組件之 SQLAlchemy

一、介紹 SQLAlchemy是一個基于Python實現的ORM框架。該框架建立在 DB API之上,使用關系對象映射進行數據庫操作,簡言之便是:將類和對象轉換成SQL,然后使用數據API執行SQL并獲取執行結果。 安裝:pip3 install sqlalc…

httpservlet獲取請求端IP地址

request.getRemoteAddr(); 轉載于:https://www.cnblogs.com/panxuejun/p/7623850.html

html 中怎樣顯示enum,JavaScript如何枚舉?

JavaScript中對象的屬性分為兩種:數據屬性和訪問器屬性。然后根據具體的上下文環境的不同,又可以將屬性分為:原型屬性和實例屬性。原型屬性是定義在對象的原型(prototype)中的屬性,而實例屬性一方面來自構造的函數中,然…

iperf測試網卡性能

Iperf是一個網絡性能測試工具。可以測試TCP和UDP帶寬質量,可以測量最大TCP帶寬,具有多種參數和UDP特性,可以報告帶寬,延遲抖動和數據包丟失 因為產品上確定要要用的PHY是千M的&a…

acrobat 控件可以發布嗎_短視頻可以同時在多個平臺發布嗎?

我們在做自媒體內容創業中,很多人都在做視頻版塊,那么一個短視頻到底能不能多平臺同時發布呢?那么今天,我來分享給大家,希望能夠幫到你解決困惑。1.作品可以多平臺分發:大家不確定是否能多平臺分發&#xf…

紅河學院計算機科學與技術,2016年紅河學院計算機科學與技術專業最低分是多少?...

類似問題答案2016年廈門理工學院計算機類(含計算機科學與技術、網絡工程、空間信息與專業最低分...學校 地 區 專業 年份 批次 類型 分數 廈門理工學院 福建 計算機類(含計算機科學與技術、網絡工程、空間信息與 2016 一批 理科 491 學校 地 區 專業 年份 批次 類型 分數 廈門理…

Flask 第三方組件之 script

Flask Script擴展提供向Flask插入外部腳本的功能,包括運行一個開發用的服務器,一個定制的Python shell,設置數據庫的腳本,cronjobs,及其他運行在web應用之外的命令行任務;使得腳本和系統分開; …

CentOS四種方法自建yum倉庫

將ISO光盤鏡像作為yum本地倉庫(適用于不能聯外網的環境): 1、 禁用所有可用的yum倉庫,為方便演示,直接全部刪除: # cd /etc/yum.repos.d # ls # rm -rf * 2、 創建光盤掛載點,掛載光盤&#x…

python substr_python數據分析-數據對象(一)

Python基本數據類型一般分為:數字、字符串、列表、元組、字典、集合這六種基本數據類型。不可變(3 個):Number(數字)、String(字符串)、Tuple(元組)&#xff…

VLC框架分析

功能部份: VLC媒體播放器的核心是libvlc ,它提供了界面,應用處理功能,如播放列表管理,音頻和視頻解碼和輸出,線程系統。所有libvlc源文件設在的/src目錄及其子目錄: # config/ :從命令行和配置…

html表格里的超鏈接點不了,Excel如何添加和取消超鏈接 Excel超鏈接打不開是怎么回事...

很多用戶在制作excel表格的時候都會添加一些超鏈接,在制作完成后發布到網頁,閱讀者可以通過超鏈接打開指引的網頁或者文件,超鏈接對制作excel表格的用戶有非常大的幫助,雖然添加超鏈接的步驟非常簡單,不過還是有些exce…

yum 安裝apache php mysql

安裝: yum install -y httpd php 查看版本:、 rpm -qa httpd php httpd-2.2.15-54.el6.centos.x86_64 php-5.3.3-48.el6_8.x86_64 修改apache配置文件: vim /etc/httpd/conf/httpd.conf 在#ServerName www.example.com:80行下添加一行 Server…

Python 散點圖線性擬合_機器學習之利用Python進行簡單線性回歸分析

前言:在利用機器學習方法進行數據分析時經常要了解變量的相關性,有時還需要對變量進行回歸分析。本文首先對人工智能/機器學習/深度學習、相關分析/因果分析/回歸分析等易混淆的概念進行區分,最后結合案例介紹如何利用Python進行簡單線性回歸…

Flask 第三方組件之 Migrate

flask-migrate是flask的一個擴展模塊,主要是擴展數據庫表結構的.類似于Django的python manage.py migrate 官方文檔: http://flask-migrate.readthedocs.io/en/latest/ 安裝 pip install flask-migrate 使用舉例 from flask import Flask from flask_sqlalchemy import SQLA…

html section 布局,section標簽的用法

標簽的用法由于昨晚發了一篇文章http://www.zcool.com.cn/article/ZMzA3MzI.html,有一個網友評論問 的用法。所以現在舉例來說明一下:html5引入了標簽,用于描述文檔的結構,它同標簽的意思一樣。但是在特定環境中,兩者又…

清北學堂Day4

(1)第一題 財富(treasure) Time Limit:1000ms Memory Limit:128MB 題目描述 LYK有n個小伙伴。每個小伙伴有一個身高hi。 這個游戲是這樣的,LYK生活的環境是以身高為美的環境,因此在這里的每個人都羨慕比自己身高高的人&#xff…

Falsk session 源碼解析

Falsk框架session請求流程 from flask import Flask # 1. 實例化Flask對象 app Flask(__name__) # 2. 設置路由 app.route(/index) def index(): return "index" if __name__ __main__: # 3. 啟動socket服務端 app.run() # 4. 用戶請求到來 ap…