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、 SMALLINT或TINYINT 時,SQL Server 也可將INTEGER 數據類型或表達式轉換爲SMALLINT數據類型或表達式,這稱爲隱式轉換。如果不能確定SQL Server 是否能完成隱式轉換或者使用了不能隱式轉換的其它數據類型,就需要使用數據類型轉換函數做顯式轉換了。此類函數有兩個:
·CAST()
CAST() 函數語法如下:
CAST ( AS [ length])
·CONVERT()
CONVERT() 函數語法如下:
CONVERT ([ length], [, style])
提醒: 1、data_type爲SQL Server系統定義的數據類型,用戶自定義的數據類型不能在此使用。
2、length用於指定數據的長度,缺省值爲30。
3、把CHAR或VARCHAR類型轉換爲諸如INT或SAMLLINT這樣的INTEGER類型、結果必須是帶正號(+)或負號(-)的數值。
4、TEXT類型到CHAR或VARCHAR類型轉換最多爲8000個字符,即CHAR或VARCHAR數據類型是最大長度。
5、IMAGE類型存儲的數據轉換到BINARY或VARBINARY類型,最多爲8000個字符。
6、把整數值轉換爲MONEY或SMALLMONEY類型,按定義的國家的貨幣單位來處理,如人民幣、美元、英鎊等。
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() 函數返回數據表達式的數據的實際長度。其返回值類型爲INT。DATALENGTH() 函數對VARCHAR、 VARBINARY、 TEXT、 IMAGE、 NVARCHAR和NTEX 等能存儲變動長度數據的數據類型特別實用。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_id是SMALLINT 類型的數據.如果沒有指定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 值應在前記錄的