函数大集(收藏)

本文详细介绍了T-SQL中的字符转换、去空格、取子串、比较和操作函数,以及数据类型转换、日期、系统、TEXT和IMAGE函数等。通过这些函数,用户可以高效地处理字符串和日期数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

T-sql函数        
1

字符转换函数

有以下几字符转换函数:
ASCII
()
函数返回字符表达式最左端字符的ASCII 码值ASCII()
函数法如下:

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

CHAR()
函数用于将ASCII 码转换为字符。其法如下:

如果没有0 ~ 255 ASCII 码值CHAR()
函数会返回一个NULL

LOWER()
函数把字符串全部转换为小写,其法如下:

UPPER
()
函数把字符串全部转换为大写,其法如下:

STR()
函数把数型数据转换为字符型数据,其法如下:

STR
<float _expression>[length[ <decimal>]]
  
length decimal 是非负值length 指定返回的字符串的度,decimal 指定返回的小数位数。如果没有指定度,缺省的length 值为10 decimal 缺省值为0
小数位数大于decimal 值时STR()
函数将其下一位四舍五入。指定大于或等于数字的符号位数+小数点前的位数+小数点位数+小数点后的位数。如果<float _expression>小数点前的位数超了指定的度,返回指定度的“*”

 

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

  LTRIM
<character _expression>

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

  RTRIM
<character _expression>

提示:在多情况下,往往需要得到部和尾部都没有空格字符的字符串,这时可将上两个函数嵌套使用。

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

  LEFT
<character_expression> <integer_expression>
  LEFT
()
函数返回的子串是从字符串最左起到第integer_expression 个字符的部分。若integer_expression 为负值返回NULL

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

  RIGHT
<character_expression> <integer_expression>
  RIGHT
()
函数返回的子串是从字符串右integer_expression 个字符起到最后一个字符的部分。若integer_expression 为负值返回NULL

SUBSTRING()
函数返回部分字符串,其法如下:

  SUBSTRING
<expression> <starting_ position> length
  SUBSTRING
()
函数返回的子串是从字符串左starting_ position 个字符起length个字符的部分。其中表达式可以是字符串或二制串或含字段名的表达式。SUBSTRING()函数不能用于TEXT IMAGE 数据型。

4、字符串比函数
字符串比函数如下所示:
CHARINDEX
()
函数返回字符串中某个指定的子串出始位置,其法如下:

  CHARINDEX
<’substring_expression’> <expression>
  
其中substring _expression 是所要找的字符表达式,expression 字符串也可列名表达式。如果没有发现子串,返回0 。此函数不能用于TEXT IMAGE 数据型。

PATINDEX()
函数返回字符串中某个指定的子串出始位置,其法如下:

  PATINDEX
<’%substring _expression%’> <column_ name>
  
其中子串表达式前后必有百分号“%”返回值为0

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

SOUNDEX()
函数返回一个四位字符,其法如下:

  SOUNDEX
<character _expression>
  SOUNDEX
()
函数将character _expression 转换为4 个字符的声音其中第一个码为原字符串的第一个字符,第二到第四个字符则为数字,是字符串的声音字母所对应的数字,但是忽略了除首字母外的串中的所有元音字母
SOUNDEX()
函数可用来找声音相似的字符串。但SOUNDEX 函数数字和字均只返回0

DIFFERENCE()
函数返回由SOUNDEX()
函数返回的两个字符表达式的的差异。其法如下:

  DIFFERENCE
<character_expression1> <character_expression2>
  
的差异是用0 1 2 3 4 来表示的,含如下:
  0--
两个SOUNDEX()
函数返回的第一个字符不同

  1--
两个SOUNDEX()
函数返回的第一个字符相同

  2--
两个SOUNDEX()
函数返回的第一、二个字符相同

  3--
两个SOUNDEX()
函数返回的第一、二、三个字符相同

  4--
两个SOUNDEX()
函数返回完全相同

5、字符串操作函数
字符串操作函数如下所示:
QUOTENAME
()
函数返回被特定字符括起来的字符串,其法如下:

QUOTENAME
<’character_expression’>[ quote_ character]
其中quote_ character 明括字符串所用的字符,如“‘”“[” 等,缺省值为“[]”

REPLICATE()
函数返回一个重character_expression 指定次数的字符串,其法如下:

REPLICATE
character_expression integer_expression
如果integer_expression 值为负值REPLICATE()
函数返回NULL 串。

REVERSE()
函数将指定的字符串的字符排列倒,其法如下:

REVERSE
<character_expression>
其中character_expression 可以是字符串、常数或一个列的

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

REPLACE
<string_expression1> <string_expression2> <string_expression3>
REPLACE
()
函数用string_expression3 string_expression1 中的子串string_expression2

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

SPACE
<integer_expression>
如果integer_expression 值为负值SPACE()
函数返回NULL 串。

STUF()函数用另一子串替字符串指定位置、度的子串,其法如下:
STUFF
<character_expression1> <start_ position> <length><character_expression2>
如果起始位置为负值为负,或者起始位置大于character_expression1 度,STUFF()
函数返回NULL 。如果length 度大于character_expression1 度,character_expression1 只保留首字符。

6、数据转换函数
在一般情况下,SQL Server 会自完成数据型的转换,例如,可以直接将字符数据型或表达式与DATATIME 数据型或表达式比当表达式中用了INTEGER SMALLINTTINYINT SQL Server 也可将INTEGER 数据型或表达式转换为SMALLINT数据型或表达式,为隐转换如果不能确定SQL Server 是否能完成转换或者使用了不能转换的其它数据型,就需要使用数据转换函数做转换了。此函数有两个:
CAST
()
函数法如下:

CAST
<expression> AS <data_ type>[ length ]

CONVERT()
函数法如下:

CONVERT
<data_ type>[ length ] <expression> [ 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

 CONVERT()
函数的style 选项能以不同的格式示日期和时间style 是将DATATIME SMALLDATETIME 数据转换为字符串用的由SQL Server 提供的转换样号,不同的号有不同的出格式。如表4-8 所示。

7、日期函数
日期函数用来操作DATETIME SMALLDATETIME 型的数据,行算运算。与其它函数一,可以在SELECT 句的SELECT WHERE 子句以及表达式中使用日期函数。其使用方法如下:
日期函数参数,其中参数个数不同的函数而不同。

DAY()
函数法如下:

DAY
<date_expression>
DAY
()
函数返回date_expression 中的日期

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

MONTH()
函数法如下:

MONTH (<date_expression>)
MONTH
()
函数返回date_expression 中的月份

DAY()
函数不同的是,MONTH()
函数的参数整数,一律返回整数1,即SQL Server 认为其是1900 1 月。

 YEAR()
函数法如下:

YEAR
<date_expression>
YEAR
()
函数返回date_expression 中的年份

 提醒:在使用日期函数,其日期值应1753年到9999年之SQL Server所能识别的日期范,否会出现错误

 DATEADD()
函数法如下:

DATEADD
<datepart> <number> <date>
DATEADD
()
函数返回指定日期date 加上指定的外日期number 生的新日期。参数“datepart” 在日期函数中常被使用,它用来指定构成日期型数据的各件,如年、季、月、日、星期等。

 DATEDIFF()
函数法如下:

DATEDIFF
()
<datepart> <date1> <date2>

DATEDIFF
()
函数返回两个指定日期在datepart 方面的不同之,即date2 date1的差距,其是一个有正号的整数针对不同的datepart DATEDIFF()函数所允的最大差距不一,如:datepart second DATEDIFF()
函数所允的最大差距值为68
datepart millisecond DATEDIFF()
函数所允的最大差距值为24 20 30 23 647 毫秒。

DATENAME()
函数法如下:

DATENAME
<datepart> <date>
DATENAME
()
函数以字符串的形式返回日期的指定部分此部分。datepart 来指定。

 DATEPART()
函数法如下:

DATEPART
<datepart> <date>
DATEPART
()
函数以整数的形式返回日期的指定部分。此部分由datepart 来指定。

DATEPART
dd date
等同于DAY date

DATEPART
mm date
等同于MONTH date

DATEPART
yy date
等同于YEAR date

 GETDATE()
函数法如下:

GETDATE
()
函数以DATETIME 的缺省格式返回系当前的日期和时间,它常作其它函数或命令的参数使用。

8、系函数
函数用于取有关计算机系、用、数据和数据库对象的信息。系函数可以在得到信息后,使用条件句,根据返回的信息行不同的操作。与其它函数一,可以在SELECT 句的SELECT WHERE 子句以及表达式中使用系函数。

 APP_NAME()
函数法如下:

APP_NAME
()
函数返回当前行的用程序的名称。其返回值类nvarchar 128)。

 4-77
测试当前用程序是否SQL Server Query Analyzer

 COALESCE()
函数法如下:

COALESCE
<expression> [ ...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

 

COL_LENGTH()
函数法如下:

COL_LENGTH
<'table_name'> <'column_name'>
COL_LENGTH
()
函数返回表中指定字段的。其返回值为INT 型。

 COL_NAME()
函数法如下:

COL_NAME
<table_id> <column_id>
COL_NAME
()
函数返回表中指定字段的名称,即列名。其返回值为SYSNAME 型。其中table_id column_id 都是INT 型的数据,函数用table_id column_id 参数来生成列名字符串。于如何table_id column_id
OBJECT_ID()
函数。

 DATALENGTH()
函数法如下:

DATALENGTH
<expression>
DATALENGTH
()
函数返回数据表达式的数据的实际长度。其返回值类INTDATALENGTH()
函数VARCHAR VARBINARY TEXT IMAGE NVARCHARNTEX 等能存储变动长度数据的数据型特别实用。NULL NULL

DB_ID()
函数法如下:

DB_ID
['database_name']
DB_ID
()
函数返回数据号。其返回值为SMALLINT 型。如果没有指定database_name
返回当前数据号。

DB_NAME() 函数法如下:
DB_NAME (database_id)
DB_NAME()
函数返回数据的名称.其返回值类NVARCHAR (128). database_idSMALLINT 型的数据.如果没有指定database_id, 返回当前数据的名称.

FORMATMESSAGE()
函数法如下
:
FORMATMESSAGE (<message_number>, <param_value>[, ...n])
FORMATMESSAGE()
函数用于从系信息表sysmessages 中挑一条存的信息
,
再将其格式转换为需要的形式.其功能似于RAISERROR 命令,不同的是RAISERROR命令立即打印出信息,FORMATMESSAGE() 函数返回编辑过的信息给调用它的程序.其返回值类
NVARCHAR.
其中message_number 是存sysmessages 表中的信息ID .param_value 是在信息中使用的参数.最多可使用20 个参数
.
FORMATMESSAGE()
函数找使用当前言平台言的信息,如果没有本地言的信息,使用U.S. English 版本言的信息.
: 假定有一个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, 'myColumn', 'myTable', 20)

 GETANSINULL()
函数法如下
:
GETANSINULL() (['database_name'])
GETANSINULL()
函数返回当前数据NULL .其返回值类INT.GETANSINULL() 函数ANSI NULL 返回1; 如果没有定ANSI ,返回0.

 :
select getansinull ('pangu')
运行果如下
:
------
1

  

HOST_ID()
函数法如下
:
HOST_ID()
函数返回服器端算机的名称.其返回值类NCHAR.

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

 

HOST_NAME()
函数法如下
:
HOST_NAME()
函数返回服器端算机的名称.其返回值类CHAR (8).

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

 

运行果如下:
XUJIN

 

 

IDENTITY()
函数法如下
:
IDENTITY (<data_type>[, seed, increment]) [AS column_name])
IDENTITY()
函数只在SELECT...INTO 句中使用,用于插入一个identity column列到新表中.其返回值类型与data_type 型相同.

 其中:
data_type
指定数据.data type INTEGER DECIMAL 的数据.Seed指定identity column 的初,即第一个.Increment 指定增加一个记录时,记录identity column 值应在前记录的基上增加的.seed increment 的缺省值为1.column_name 是所插入的identity column 的列名.AS column_name 选项,但由于函数在表中插入了一个新列,所以必指定列名.如果不使用AS column_name 选项,可以使用以下两方式来指定列名
:
(1) select identity (int, 1, 1) as column_name
into newtable
from oldtable
(2) select column_name = identity (int, 1, 1)
into newtable
from oldtable
identity column 的信息,"管理数据"中的"列属性".

 IDENT_INCR()
函数法如下
:
IDENT_INCR ('table_or_view')
IDENT_INCR()
函数返回表中标识性字段identity column 的增量.若无此字段,返回NULL .其返回值类NUMERIC.

 IDENT_SEED() 函数法如下:
IDENT_SEED (<'table_or_view'>)
IDENT_SEED()
函数返回表中标识性字段identity column 的初.若无此字段,返回NULL .其返回值类NUMERIC.

 INDEX_COL()
函数法如下
:
INDEX_COL (<'table_name'>, <index_id>, <key_id>)
INDEX_COL()
函数返回表内索引识别码为index_id 的索引的名称,并找出索引的列合中第key_id 个列名.其返回值类NCHAR.

 ISDATE()
函数法如下
:
ISDATE (<expression>)
ISDATE()
函数判断所定的表达式是否合理日期,如果是返回1, 不是返回0.

 ISNULL() 函数法如下:
ISNULL (<check_expression>, <replacement_value>)
ISNULL()
函数将表达式中的NULL 用指定.如果check_expresssion 不是NULL, 返回其原来的,,返回replacement_value .

  

提醒:reaplacement_value的数据chech_expresssion一致.

 ISNUMERIC()
函数法如下
:
ISNUMERIC (<expression>)
ISNUMERIC()
函数判断所定的表达式是否合理的数(INTEGER FLOATING POINT NUMBER MONEY DECIMAL ),如果是返回1, 不是返回0.

 

提醒:检查MONEY型数据先用CONVERT()函数将其转换为型或字符型。

 

 NEWID() 函数法如下:
NEWID()
函数返回一个UNIQUEIDENTIFIER 型的数.此函数使用算机的网卡的Ethernet 地址加上CPU Clock 生的数字而得到其返回.由于网卡的Ethernet地址是全球惟一的(在未来近一百年内不会生出相同Ethernet 地址的网卡),因而函数所生的数字也是惟一的.

 NULLIF()
函数法如下
:
NULLIF (<expression1>, <expression2>)
NULLIF()
函数在expression1 expression2 相等返回NULL ,若不相等时则返回expression1 .其返回值类型与expression1 相同.expression1 expression2 应为的数据.

 OBJECT_ID() 函数法如下:
OBJECT_ID (<'object_name'>)
OBJECT_ID()
函数返回数据库对象的.其返回值类INT.

 提醒:当指定一个临时表的表名,其表名的前面必加上临时数据"tempdb",如:select object_id("tempdb..#mytemptable").

OBJECT_NAME()
函数法如下
:
OBJECT_NAME (<object_id>)
OBJECT_NAME()
函数返回数据库对象的名称.其返回值类NCHAR.

PARSENAME() 函数法如下:
PARSENAME (<'object_name '>, <object_piece>)
PARSENAME()
函数返回一个数据库对象完整名称中的特定部分(象名称或数据库拥有者名称或数据名称或服器名称).其返回值类
NCHAR.
其中object_piece INT ,其取如下
:
  
象名称
Object name;
  
数据库拥有者名称
Owner name;
  
数据名称
Database name;
  
器名称
Server name.
如果object_name object_piece NULL, 返回NULL .

 PERMISSIONS()
函数法如下
:
PERMISSIONS ([object_id [, 'column_name']])
PERMISSIONS()
函数用于取当前用户对某一象的存取限或某一命令的.其返回值为一个32 位的bitmap ,其中低16 位表示目前用户对象的存取.16 位表示用是否可以放此象的其它人
.
如果不指定object_id, 函数返回目前用的命令限的bitmap .使用column_name 选项可以得到表的列.
PERMISSIONS() 函数使用方法,将在以后的章别讲.

  

STATS_DATE()
函数法如下
:
STATS_DATE (<table_id>, <index_id>)
STATS_DATE()
函数返回最新的索引统计日期.其返回值类DATETIME.

SUSER_ SID()
函数法如下
:
SUSER_SID (['login_name'])
SUSER_SID()
函数根据用名返回用SID (Security Identification Number,安全帐户).其返回值类INT. 如果不指定login_name, 返回当前用SID.

 SUSER_SNAME()
函数法如下
:
SUSER_SNAME ([server_user_sid])
SUSER_SNAME()
函数根据SID 号返回用的登.如果没有指定server_user_sid,返回当前用的登.其返回值类NCHAR.

USER_ID()
函数法如下
:
USER_ID (['user_name'])
USER_ID()
函数根据用数据的用名返回用的数据ID .其返回值类INT. 如果没有指定user_name, 返回当前用的数据ID .

 USER_NAME()
函数法如下
:
USER_NAME ([user_id])
USER_NAME()
函数根据用的数据ID 号返回用的数据.其返回值类NCHAR. 如果没有指定user_id, 返回当前数据的用.

 9TEXT IMAGE
函数

TEXTPTR()
函数法如下:
TEXTPTR (<column>)
TEXTPTR()
函数返回一个指向存文本的第一个数据库页的指.其返回是一个VARBINARY (16) 型的二制字符串.如果数据TEXT NTEXT IMAGE的列没有予初,TEXTPTR()
函数返回一个NULL .

 TEXTVALID() 函数法如下:
TEXTVALID (<'table.column'>, <text_ pointer>)
TEXTVALID()
函数用于检查指定的文本指是否有效.如果有效,返回1; 无效,返回0. 如果列未予初,返回NULL .

 

10NILADIC
函数

NILADIC
函数返回一个用时间.这类函数均不参数.NILADIC 函数常被定义为CREATE ALERT TABLE 句中DEFAULT 束的一部分,可参"管理数据".主要的NILADIC 函数如下

CURRENT_TIMESTAMP
函数法如下
:
CURRENT_TIMESTAMP
CURRENT_TIMESTAMP
函数返回当前的日期和时间,等同于GETDATE() 函数.返回值类DATETIME.

 

CURRENT_USER
函数法如下
:
CURRENT_USER
函数与USER_NAME() 函数功能相同,返回当前用的数据.返回值类SYSNAME.

 

 

SESSION_USER
函数法如下
:
SESSION_USER
SESSION_USER
函数等同于USER_NAME() 函数,返回当前用的数据.返回值类NCHAR.

 

 

SYSTEM_USER
函数法如下
:
SYSTEM_USER
SYSTEM_USER
返回当前系的用.如果用是以Windows NT 认证方式登SQL Server ,返回Windows NT 的登;如果用是以SQL Server 认证方式登,返回SQL Server 中的用.

 

 

USER 函数法如下:
USER
USER
与系函数USER_NAME() 的功能相同,返回当前用的数据.返回值类CHAR.

 

 

11、用自定函数
SQL Server 2000 ,可以自定函数了.SQL Server 2000 中用自定函数是作一个数据库对象来管理的,可以使用企管理器(Enterprise Manager) Transact-SQL 命令来建、修改、.其具体方法13 "视图和自定函数".

 

 

本章介Transact-SQL 言的基本概念,及其使用方法.Transact-SQL 言需要大量的,才能熟运用.本章及以后的SQL 法基本上都是准的ANSI SQL 兼容,在其它数据,ORACLE SYBASE INFORMIX FOXPRO ,大部分句均可套用.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值