函数
Transact-SQL 编程语言提供三种函数:
- 行集函数
可以像 SQL 语句中表引用一样使用。有关这些函数的列表的更多信息,请参见行集函数。
- 聚合函数
对一组值操作,但返回单一的汇总值。有关这些函数的列表的更多信息,请参见聚合函数。
- 标量函数
对单一值操作,返回单一值。只要表达式有效即可使用标量函数。下表列出了标量函数的分类。
函数分类 解释 配置函数 返回当前配置信息。 游标函数 返回游标信息。 日期和时间函数 对日期和时间输入值执行操作,返回一个字符串、数字或日期和时间值。 数学函数 对作为函数参数提供的输入值执行计算,返回一个数字值。 元数据函数 返回有关数据库和数据库对象的信息。 安全函数 返回有关用户和角色的信息。 字符串函数 对字符串(char 或 varchar)输入值执行操作,返回一个字符串或数字值。 系统函数 执行操作并返回有关 Microsoft® SQL Server™ 中的值、对象和设置的信息。 系统统计函数 返回系统的统计信息。 文本和图像函数 对文本或图像输入值或列执行操作,返回有关这些值的信息。
函数确定性
SQL Server 2000 的内置函数可以是确定的也可以是不确定的。如果任何时候用一组特定的输入值调用内置函数,返回的结果总是相同的,则这些内置函数为确定的。如果每次调用内置函数时即使用的是相同的一组特定输入值,返回的结果不总是相同的,则这些内置函数为不确定的。
函数的确定性将规定函数是否可用在索引计算列和索引视图中。索引扫描必须始终生成一致的结果。因而,只有确定性函数才能用来定义将编制索引的计算列和视图。
配置、游标、元数据、安全和系统统计函数不具有确定性。此外,下列内置函数也始终为不确定的:
@@ERROR | FORMATMESSAGE | NEWID |
IDENTITY | GETANSINULL | PERMISSIONS |
@@ROWCOUNT | GETDATE | SESSION_USER |
@@TRANCOUNT | HOST_ID | STATS_DATE |
APP_NAME | HOST_NAME | SYSTEM_USER |
CURRENT_TIMESTAMP | IDENT_INCR | TEXTPTR |
CURRENT_USER | IDENT_SEED | TEXTVALID |
DATENAME | IDENTITY | USER_NAME |
函数排序规则
使用字符串输入并返回字符串输出的函数对输出使用输入字符串的排序规则。
使用非字符输入并返回字符串的函数对输出使用当前数据库的默认排序规则。
使用多个字符串输入并返回字符串的函数,使用排序规则的优先顺序规则设置输出字符串的排序规则。有关更多信息,请参见排序规则的优先顺序。
<!--RELATEDTOPICSLIST-->请参见
CREATE FUNCTION
确定性函数和非确定性函数
用户定义函数
配置函数
这些标量函数返回当前配置选项设置的信息。
@@DATEFIRST | @@OPTIONS |
@@DBTS | @@REMSERVER |
@@LANGID | @@SERVERNAME |
@@LANGUAGE | @@SERVICENAME |
@@LOCK_TIMEOUT | @@SPID |
@@MAX_CONNECTIONS | @@TEXTSIZE |
@@MAX_PRECISION | @@VERSION |
@@NESTLEVEL |
所有配置函数都不具有确定性。每次用一组特定输入值调用它们时,返回的结果不总是相同的。有关函数确定性的更多信息,请参见确定性函数和非确定性函数。
游标函数
这些标量函数返回有关游标的信息。
@@CURSOR_ROWS
CURSOR_STATUS
@@FETCH_STATUS
所有游标函数都不具有确定性。每次用一组特定输入值调用它们时,返回的结果不总是相同的。有关函数确定性的更多信息,请参见确定性函数和非确定性函数。
日期和时间函数
这些标量函数对日期和时间输入值执行操作,并返回一个字符串、数字值或日期和时间值。
下表列出日期和时间函数以及它们的确定性属性。有关函数确定性的更多信息,请参见确定性函数和非确定性函数。
函数 | 确定性 |
---|---|
DATEADD | 具有确定性 |
DATEDIFF | 具有确定性 |
DATENAME | 不具有确定性 |
DATEPART | 除了用作 DATEPART (dw, date) 外都具有确定性。dw 是工作日的日期部分,取决于由设置每周第一天的 SET DATEFIRST 所设置的值。 |
DAY | 具有确定性 |
GETDATE | 不具有确定性 |
GETUTCDATE | 不具有确定性 |
MONTH | 具有确定性 |
YEAR | 具有确定性 |
字符串函数
这些标量函数对字符串输入值执行操作,返回字符串或数字值。
ASCII | NCHAR | SOUNDEX |
CHAR | PATINDEX | SPACE |
CHARINDEX | REPLACE | STR |
DIFFERENCE | QUOTENAME | STUFF |
LEFT | REPLICATE | SUBSTRING |
LEN | REVERSE | UNICODE |
LOWER | RIGHT | UPPER |
LTRIM | RTRIM |
除 CHARINDEX 和 PATINDEX 外的所有其它内置字符串函数都具有确定性。每次用一组给定的输入值调用它们时,都返回相同的值。有关函数确定性的更多信息,请参见确定性函数和非确定性函数。
数学函数
这些标量函数通常对作为参数提供的输入值执行计算,并返回一个数字值。
ABS | DEGREES | RAND |
ACOS | EXP | ROUND |
ASIN | FLOOR | SIGN |
ATAN | LOG | SIN |
ATN2 | LOG10 | SQUARE |
CEILING | PI | SQRT |
COS | POWER | TAN |
COT | RADIANS |
<!--NOTE-->
说明算术函数(例如 ABS、CEILING、DEGREES、FLOOR、POWER、RADIANS 和 SIGN)返回与输入值相同数据类型的值。三角函数和其它函数(包括 EXP、LOG、LOG10、SQUARE 和 SQRT)将输入值投影到 float 并返回 float 值。
<!--/NOTE-->除了 RAND 外,所有数学函数都是确定性函数。每次用一组特定输入值调用它们时,所返回的结果相同。仅当指定种子参数时,RAND 才具有确定性。有关函数确定性的更多信息,请参见确定性函数和非确定性函数。
元数据函数
这些标量函数返回有关数据库和数据库对象的信息。
COL_LENGTH | fn_listextendedproperty |
COL_NAME | FULLTEXTCATALOGPROPERTY |
COLUMNPROPERTY | FULLTEXTSERVICEPROPERTY |
DATABASEPROPERTY | INDEX_COL |
DATABASEPROPERTYEX | INDEXKEY_PROPERTY |
DB_ID | INDEXPROPERTY |
DB_NAME | OBJECT_ID |
FILE_ID | OBJECT_NAME |
FILE_NAME | OBJECTPROPERTY |
FILEGROUP_ID | @@PROCID |
FILEGROUP_NAME | SQL_VARIANT_PROPERTY |
FILEGROUPPROPERTY | TYPEPROPERTY |
FILEPROPERTY |
所有元数据函数都具有不确定性。每次用一组特定的输入值调用它们时,所返回的结果不总是相同。有关函数确定性的更多信息,请参见确定性函数和非确定性函数。
安全函数
这些安全函数返回有关用户和角色的信息。
fn_trace_geteventinfo | IS_SRVROLEMEMBER |
fn_trace_getfilterinfo | SUSER_SID |
fn_trace_getinfo | SUSER_SNAME |
fn_trace_gettable | USER_ID |
HAS_DBACCESS | USER |
IS_MEMBER |
所有的安全函数都具有不确定性。每次用一组特定的输入值调用它们时,所返回的结果不总是相同。有关函数确定性的更多信息,请参见确定性函数和非确定性函数。
系统函数
这些标量函数对 Microsoft® SQL Server™ 中的值、对象和设置进行操作并返回有关信息。
下表列出系统函数及其确定性属性。有关函数确定性的更多信息,请参见确定性函数和非确定性函数。
函数 | 确定性 |
---|---|
APP_NAME | 不具有确定性 |
CASE 表达式 | 具有确定性 |
CAST 和 CONVERT | 除非与 datetime、smalldatetime 或 sql_variant 一起使用,其它时候都具有确定性。 |
COALESCE | 具有确定性 |
COLLATIONPROPERTY | 不具有确定性 |
CURRENT_TIMESTAMP | 不具有确定性 |
CURRENT_USER | 不具有确定性 |
DATALENGTH | 具有确定性 |
@@ERROR | 不具有确定性 |
fn_helpcollations | 具有确定性 |
fn_servershareddrives | 不具有确定性 |
fn_virtualfilestats | 不具有确定性 |
FORMATMESSAGE | 不具有确定性 |
GETANSINULL | 不具有确定性 |
HOST_ID | 不具有确定性 |
HOST_NAME | 不具有确定性 |
IDENT_CURRENT | 不具有确定性 |
IDENT_INCR | 不具有确定性 |
IDENT_SEED | 不具有确定性 |
@@IDENTITY | 不具有确定性 |
IDENTITY(函数) | 不具有确定性 |
ISDATE | 只有与 CONVERT 函数一起使用,指定 CONVERT 样式参数且样式参数不等于 0、100、9 或 109 时才具有确定性。样式 0 和 100 使用默认格式 mon dd yyyy hh:miAM(或 PM)。样式 9 和 109 使用默认格式加毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM)。 |
ISNULL | 具有确定性 |
ISNUMERIC | 具有确定性 |
NEWID | 不具有确定性 |
NULLIF | 具有确定性 |
PARSENAME | 具有确定性 |
PERMISSIONS | 不具有确定性 |
@@ROWCOUNT | 不具有确定性 |
ROWCOUNT_BIG | 不具有确定性 |
SCOPE_IDENTITY | 不具有确定性 |
SERVERPROPERTY | 不具有确定性 |
SESSIONPROPERTY | 不具有确定性 |
SESSION_USER | 不具有确定性 |
STATS_DATE | 不具有确定性 |
SYSTEM_USER | 不具有确定性 |
@@TRANCOUNT | 不具有确定性 |
USER_NAME | 不具有确定性 |
系统统计函数
这些标量函数返回系统的统计信息。
@@CONNECTIONS | @@PACK_RECEIVED |
@@CPU_BUSY | @@PACK_SENT |
fn_virtualfilestats | @@TIMETICKS |
@@IDLE | @@TOTAL_ERRORS |
@@IO_BUSY | @@TOTAL_READ |
@@PACKET_ERRORS | @@TOTAL_WRITE |
所有系统统计函数都不具有确定性。每次用一组特定的输入值调用它们时,所返回的结果不总是相同。有关函数确定性的更多信息,请参见确定性函数和非确定性函数。
文本和图像函数
这些标量函数对文本或图像输入值或列执行操作,返回有关这些值的信息。
PATINDEX
TEXTPTR
TEXTVALID
这些文本和图像函数都是不确定性函数,每次调用它们时,即使是用相同的一组输入值,也可能返回不同的结果。有关函数确定性的更多信息,请参见确定性函数和非确定性函数。