T-Sql函數

1、 ()
RIGHT
() 函數返回部分字符串,其法如下:
  RIGHT

  RIGHT
() 函數返回的子串是從字符串右integer_expression 個字符起到最後一個字符的部分。若integer_expression 爲負值返回NULL

  
4-49


·SUBSTRING
()
SUBSTRING
() 函數返回部分字符串,其法如下:
  SUBSTRING
length
  SUBSTRING
() 函數返回的子串是從字符串左starting_ position 個字符起length個字符的部分。其中表達式可以是字符串或二制串或含字段名的表達式。SUBSTRING()函數不能用於TEXT IMAGE 數據型。

  
4-50


4、字符串比函數
字符串比函數如下所示:
·CHARINDEX
()
CHARINDEX
() 函數返回字符串中某個指定的子串出始位置,其法如下:
  CHARINDEX
<’substring_expression’>
  
其中substring _expression 是所要找的字符表達式,expression 字符串也列名表達式。如果沒有發現子串,返回0 。此函數不能用於TEXT IMAGE 數據型。

  
4-51


  
4-52


·PATINDEX
()
PATINDEX
() 函數返回字符串中某個指定的子串出始位置,其法如下:
  PATINDEX
<’%substring _expression%’>
  
其中子串表達式前後必有百分號“%”返回值爲0

  
4-53


  
CHARINDEX() 函數不同的是,PATINDEX() 函數的子串中可以使用通配符,且此函數可用於CHAR VARCHAR TEXT 數據型。

  
4-54


·SOUNDEX
()
SOUNDEX
() 函數返回一個四位字符,其法如下:
  SOUNDEX

  SOUNDEX
() 函數將character _expression 轉換爲4 個字符的聲音其中第一個碼爲原字符串的第一個字符,第二到第四個字符則爲數字,是字符串的聲音字母所對應的數字,但是忽略了除首字母外的串中的所有元音字母 SOUNDEX() 函數可用來找聲音相似的字符串。但SOUNDEX 函數數字和字均只返回0

  
4-55


·DIFFERENCE
()
DIFFERENCE
() 函數返回由SOUNDEX() 函數返回的兩個字符表達式的的差異。其法如下:
  DIFFERENCE

  
的差異是用0 1 2 3 4 來表示的,含如下:
  0--
兩個SOUNDEX() 函數返回的第一個字符不同
  1--
兩個SOUNDEX() 函數返回的第一個字符相同
  2--
兩個SOUNDEX() 函數返回的第一、二個字符相同
  3--
兩個SOUNDEX() 函數返回的第一、二、三個字符相同
  4--
兩個SOUNDEX() 函數返回完全相同

  
4-56


5、字符串操作函數
字符串操作函數如下所示:
·QUOTENAME
()
QUOTENAME
() 函數返回被特定字符括起來的字符串,其法如下:
QUOTENAME
<’character_expression’>[ quote_ character]
其中quote_ character 明括字符串所用的字符,如“‘”“[” 等,缺省值爲“[]”

  
4-57


·REPLICATE
()
REPLICATE
() 函數返回一個重character_expression 指定次數的字符串,其法如下:
REPLICATE
character_expression integer_expression
如果integer_expression 值爲負值REPLICATE() 函數返回NULL 串。

  
4-58


·REVERSE
()
REVERSE
() 函數將指定的字符串的字符排列倒,其法如下:
REVERSE

其中character_expression 可以是字符串、常數或一個列的

  
4-59


·REPLACE
()
REPLACE
() 函數返回被替了指定子串的字符串,其法如下:
REPLACE

REPLACE
() 函數用string_expression3 string_expression1 中的子串string_expression2

  
4-60


·SPACE
()
SPACE
() 函數返回一個有指定度的空白字符串,其法如下:
SPACE

如果integer_expression 值爲負值SPACE() 函數返回NULL 串。
字符轉換函數
有以下幾字符轉換函數:
·ASCII
()
ASCII
() 函數返回字符表達式最左端字符的ASCII 碼值ASCII() 函數法如下:


  
4-40

提醒:ASCII()函數中,數字的字符串可不用‘’括起來,但含其它字符的字符串必‘’括起來使用,否會出

·CHAR
()
CHAR
() 函數用於將ASCII 碼轉換爲字符。其法如下:

如果沒有0 ~ 255 ASCII 碼值CHAR() 函數會返回一個NULL

  
4-41


·LOWER
()
LOWER
() 函數把字符串全部轉換爲小寫,其法如下:
   

  
4-42


·UPPER
()
UPPER
() 函數把字符串全部轉換爲大寫,其法如下:
 

  
4-43


·STR
()
STR
() 函數把數型數據轉換爲字符型數據,其法如下:
STR
[length[ ]]
  
length decimal 是非負值length 指定返回的字符串的度,decimal 指定返回的小數位數。如果沒有指定度,缺省的length 值爲10 decimal 缺省值爲0 小數位數大於decimal 值時STR() 函數將其下一位四捨五入。指定大於或等於數字的符號位數+小數點前的位數+小數點位數+小數點後的位數。如果小數點前的位數超了指定的度,返回指定度的“*”

  
4-44


2、去空格函數
去空格函數有如下兩
·LTRIM
()
LTRIM
() 函數把字符串部的空格去掉,其法如下:
  LTRIM


  
4-45


·RTRIM
()
RTRIM
() 函數把字符串尾部的空格去掉,其法如下:
  RTRIM


  
4-46


提示:多情況下,往往需要得到部和尾部都沒有空格字符的字符串,這時可將上兩個函數嵌套使用。

  
4-47


3、取子串函數
取子串函數如下所示:
·LEFT
()
LEFT
() 函數返回部分字符串,其法如下:
  LEFT

  LEFT
() 函數返回的子串是從字符串最左起到第integer_expression 個字符的部分。若integer_expression 爲負值返回NULL

  
4-48


·RIGHT

  4-61


·STUFF
()
STUF
()函數用另一子串替字符串指定位置、度的子串,其法如下:
STUFF

如果起始位置爲負值爲負,或者起始位置大於character_expression1 度,STUFF() 函數返回NULL 。如果length 度大於character_expression1 度,character_expression1 只保留首字符。

  4-62


6、數據轉換函數
在一般情況下,SQL Server 會自完成數據型的轉換,例如,可以直接將字符數據型或表達式與DATATIME 數據型或表達式比當表達式中用了INTEGER SMALLINTTINYINT SQL Server 也可將INTEGER 數據型或表達式轉換爲SMALLINT數據型或表達式,爲隱轉換如果不能確定SQL Server 是否能完成轉換或者使用了不能轉換的其它數據型,就需要使用數據轉換數做轉換了。此函數有兩個:
·CAST
()
CAST
() 函數法如下:
CAST
AS [ length]

·CONVERT
()
CONVERT
() 函數法如下:
CONVERT
[ length] [ style]

提醒: 1data_typeSQL Server的數據型,用自定的數據型不能在此使用。
2
length用於指定數據的度,缺省值爲30
3
、把CHARVARCHAR轉換爲諸INTSAMLLINT這樣INTEGER型、果必正號(+)或號(-)的數
4TEXT型到CHARVARCHAR轉換最多8000個字符,即CHARVARCHAR數據型是最大度。
5IMAGE型存的數據轉換BINARYVARBINARY型,最多8000個字符。
6
、把整數值轉換爲MONEYSMALLMONEY型,按定的國家的貨幣單位來理,如人民、美元、英等。
7
BIT型的轉換把非零值轉換爲1,並仍以BIT型存
8
試圖轉換到不同度的數據型,會截短轉換值並在轉換值“+”,以標識發生了這種截斷。

  
4-63


  
4-64


  
4-65



CONVERT() 函數的style 選項能以不同的格式示日期和時間style 是將DATATIME SMALLDATETIME 數據轉換爲字符串用的由SQL Server 提供的轉換樣號,不同的號有不同的出格式。如表4-8 所示。


  
4-66


7、日期函數
日期函數用來操作DATETIME SMALLDATETIME 型的數據,行算運算。與其它函數一,可以在SELECT 句的SELECT WHERE 子句以及表達式中使用日期函數。其使用方法如下:
 
日期函數參數,其中參數個數不同的函數而不同。

·DAY()
DAY
() 函數法如下:
DAY

DAY
() 函數返回date_expression 中的日期

  
4-67


在上例中,DAY() 函數使用整數作參數,系1900 1 1 日起往後數指定整數+1 天再返回其日期。

·MONTH()
MONTH
() 函數法如下:
MONTH ()
MONTH
() 函數返回date_expression 中的月份

  
4-68


DAY() 函數不同的是,MONTH() 函數的參數整數,一律返回整數1,即SQL Server 認爲其是1900 1 月。

  
4-69


·YEAR
()
YEAR
() 函數法如下:
YEAR

YEAR
() 函數返回date_expression 中的年份

  
4-70


提醒:在使用日期函數,其日期值應1753年到9999年之SQL Server所能識別的日期範,否會出現錯誤

  
4-71


·DATEADD
()
DATEADD
() 函數法如下:
DATEADD

DATEADD
() 函數返回指定日期date 加上指定的外日期number 生的新日期。參數“datepart” 在日期函數中常被使用,它用來指定構成日期型數據的各件,如年、季、月、日、星期等。其取如表4-9 所示:


  
4-72



·DATEDIFF
()
DATEDIFF
() 函數法如下:
DATEDIFF
()
DATEDIFF
() 函數返回兩個指定日期在datepart 方面的不同之,即date2 date1的差距,其是一個有正號的整數針對不同的datepart DATEDIFF()函數所允的最大差距不一,如:datepart second DATEDIFF() 函數所允的最大差距值爲68 datepart millisecond DATEDIFF() 函數所允的最大差距值爲24 20 30 23 647 毫秒。

  
4-73 查詢在本位工作了8 年以上的工的姓名和所在的部果按在本位工作的時間長短排序。


·DATENAME()
DATENAME
() 函數法如下:
DATENAME
>
DATENAME
() 函數以字符串的形式返回日期的指定部分此部分。datepart 來指定。

  
4-74 查詢大於等於7000 工的姓名、部門編號、工位的年份,果按工高低降序排列。


·DATEPART()
DATEPART
() 函數法如下:
DATEPART

DATEPART
() 函數以整數的形式返回日期的指定部分。此部分由datepart 來指定。
DATEPART
dd date 等同於DAY date
DATEPART
mm date 等同於MONTH date
DATEPART
yy date 等同於YEAR date

  
4-75


·GETDATE
()
GETDATE
() 函數法如下:
GETDATE
()
GETDATE
() 函數以DATETIME 的缺省格式返回系當前的日期和時間,它常作其它函數或命令的參數使用。

  
4-71
 

8、系函數
函數用於取有關計算機系、用、數據和數據庫對象的信息。系函數可以在得到信息後,使用條件句,根據返回的信息行不同的操作。與其它函數一,可以在SELECT 句的SELECT WHERE 子句以及表達式中使用系函數。

·APP_NAME
()
APP_NAME
() 函數法如下:
 APP_NAME
()
APP_NAME
() 函數返回當前行的用程序的名稱。其返回值類nvarchar 128)。

  
4-77 測試當前用程序是否SQL Server Query Analyzer


·COALESCE
()
COALESCE
() 函數法如下:
COALESCE
[ ...n]
COALESCE
() 函數返回衆多表達式中第一個非NULL 表達式的。如果所有的表達式均NULL COALESCE() 函數返回NULL COALESCE() 函數等效於下面的CASE 句:

CASE
WHEN
expression1 IS NOT NULL THEN expression1

WHEN expressionN IS NOT NULL THEN expression
ELSE NULL

  
4-78


·COL_LENGTH
()
COL_LENGTH
() 函數法如下:
 COL_LENGTH
<&apostable_name&apos> <&aposcolumn_name&apos>
COL_LENGTH
() 函數返回表中指定字段的。其返回值爲INT 型。

  
4-79


·COL_NAME
()
COL_NAME
() 函數法如下:
 COL_NAME

COL_NAME
() 函數返回表中指定字段的名稱,即列名。其返回值爲SYSNAME 型。其中table_id column_id 都是INT 型的數據,函數用table_id column_id 參數來生成列名字符串。於如何table_id column_id OBJECT_ID() 函數。

  
4-80



·DATALENGTH
()
DATALENGTH
() 函數法如下:
DATALENGTH

DATALENGTH
() 函數返回數據表達式的數據的實際長度。其返回值類INTDATALENGTH() 函數VARCHAR VARBINARY TEXT IMAGE NVARCHARNTEX 等能存儲變動長度數據的數據型特別實用。NULL NULL

  
4-81


· DB_ID
()
DB_ID
() 函數法如下:
DB_ID
[&aposdatabase_name&apos]
DB_ID
() 函數返回數據號。其返回值爲SMALLINT 型。如果沒有指定database_name 返回當前數據號。

  
4-82



·DB_NAME
()
DB_NAME()
函數法如下:
DB_NAME (database_id)
DB_NAME()
函數返回數據的名稱.其返回值類NVARCHAR (128). database_idSMALLINT 型的數據.如果沒有指定database_id, 返回當前數據的名稱.

  
4-83:


· FORMATMESSAGE()
FORMATMESSAGE()
函數法如下:
 FORMATMESSAGE (, [, ...n])
FORMATMESSAGE()
函數用於從系信息表sysmessages 中挑一條存的信息,
再將其格式轉換爲需要的形式.其功能似於RAISERROR 命令,不同的是RAISERROR命令立即打印出信息,FORMATMESSAGE() 函數返回編輯過的信息給調用它的程序.其返回值類NVARCHAR.
其中message_number 是存sysmessages 表中的信息ID .param_value 是在信息中使用的參數.最多可使用20 個參數.
FORMATMESSAGE()
函數找使用當前言平臺言的信息,如果沒有本地言的信息,使用U.S. English 版本言的信息.

  
4-84: 假定有一個10001 的信息存sysmessages 表中,此信息的內容"The Length of rows %column_name in %table_name is %column_num.".FORMATMESSAGE() 函數用myColumn myTable 20替代上述參數,果存@test1 .程序如下:
declare @test1 varchar (100)
select @test1 = formatmessage (10001, &aposmyColumn&apos, &aposmyTable&apos, 20)

·GETANSINULL()
GETANSINULL()
函數法如下:
 GETANSINULL() ([&aposdatabase_name&apos])
GETANSINULL()
函數返回當前數據NULL .其返回值類INT.GETANSINULL() 函數ANSI NULL 返回1; 如果沒有定ANSI ,返回0.

  
4-85:
select getansinull (&apospangu&apos)
運行果如下:
------
1

·HOST_ID()
HOST_ID()
函數法如下:
 HOST_ID()
HOST_ID()
函數返回服器端算機的名稱.其返回值類NCHAR.

  
4-86:
declare @hostID char (8)
select @hostID = host_id()
print @hostID
運行果如下:
-606771

·HOST_NAME()
HOST_NAME()
函數法如下:
 HOST_NAME()
HOST_NAME()
函數返回服器端算機的名稱.其返回值類CHAR (8).

4-87:
declare @hostNAME nchar (20)
select @hostNAME = host_name()
print @hostNAME

運行果如下:
XUJIN

·IDENTITY()
IDENTITY()
函數法如下:
IDENTITY ([, seed, increment]) [AS column_name])
IDENTITY()
函數只在SELECT...INTO 句中使用,用於插入一個identity column列到新表中.其返回值類型與data_type 型相同.

其中:
data_type
指定數據.data type INTEGER DECIMAL 的數據.Seed指定identity column 的初,即第一個.Increment 指定增加一個記錄時,記錄identity column 值應在前記錄

發佈了24 篇原創文章 · 獲贊 0 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章