函数

函数

Transact-SQL 编程语言提供三种函数:

  • 行集函数

    可以像 SQL 语句中表引用一样使用。有关这些函数的列表的更多信息,请参见行集函数。

  • 聚合函数

    对一组值操作,但返回单一的汇总值。有关这些函数的列表的更多信息,请参见聚合函数。

  • 标量函数

    对单一值操作,返回单一值。只要表达式有效即可使用标量函数。下表列出了标量函数的分类。

    函数分类解释
    配置函数返回当前配置信息。
    游标函数返回游标信息。
    日期和时间函数 对日期和时间输入值执行操作,返回一个字符串、数字或日期和时间值。
    数学函数对作为函数参数提供的输入值执行计算,返回一个数字值。
    元数据函数返回有关数据库和数据库对象的信息。
    安全函数返回有关用户和角色的信息。
    字符串函数对字符串(charvarchar)输入值执行操作,返回一个字符串或数字值。
    系统函数执行操作并返回有关 Microsoft® SQL Server™ 中的值、对象和设置的信息。
    系统统计函数返回系统的统计信息。
    文本和图像函数对文本或图像输入值或列执行操作,返回有关这些值的信息。

函数确定性

SQL Server 2000 的内置函数可以是确定的也可以是不确定的。如果任何时候用一组特定的输入值调用内置函数,返回的结果总是相同的,则这些内置函数为确定的。如果每次调用内置函数时即使用的是相同的一组特定输入值,返回的结果不总是相同的,则这些内置函数为不确定的。

函数的确定性将规定函数是否可用在索引计算列和索引视图中。索引扫描必须始终生成一致的结果。因而,只有确定性函数才能用来定义将编制索引的计算列和视图。

配置、游标、元数据、安全和系统统计函数不具有确定性。此外,下列内置函数也始终为不确定的:

@@ERRORFORMATMESSAGENEWID
IDENTITYGETANSINULLPERMISSIONS
@@ROWCOUNTGETDATESESSION_USER
@@TRANCOUNTHOST_IDSTATS_DATE
APP_NAMEHOST_NAMESYSTEM_USER
CURRENT_TIMESTAMPIDENT_INCRTEXTPTR
CURRENT_USERIDENT_SEEDTEXTVALID
DATENAMEIDENTITYUSER_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具有确定性

字符串函数

这些标量函数对字符串输入值执行操作,返回字符串或数字值。

ASCIINCHARSOUNDEX
CHARPATINDEXSPACE
CHARINDEXREPLACESTR
DIFFERENCEQUOTENAMESTUFF
LEFTREPLICATESUBSTRING
LENREVERSEUNICODE
LOWERRIGHTUPPER
LTRIMRTRIM

除 CHARINDEX 和 PATINDEX 外的所有其它内置字符串函数都具有确定性。每次用一组给定的输入值调用它们时,都返回相同的值。有关函数确定性的更多信息,请参见确定性函数和非确定性函数。

数学函数

这些标量函数通常对作为参数提供的输入值执行计算,并返回一个数字值。

ABSDEGREESRAND
ACOSEXPROUND
ASINFLOORSIGN
ATANLOGSIN
ATN2LOG10SQUARE
CEILINGPISQRT
COSPOWERTAN
COTRADIANS

<!--NOTE-->

说明算术函数(例如 ABS、CEILING、DEGREES、FLOOR、POWER、RADIANS 和 SIGN)返回与输入值相同数据类型的值。三角函数和其它函数(包括 EXP、LOG、LOG10、SQUARE 和 SQRT)将输入值投影到 float 并返回 float 值。

<!--/NOTE-->

除了 RAND 外,所有数学函数都是确定性函数。每次用一组特定输入值调用它们时,所返回的结果相同。仅当指定种子参数时,RAND 才具有确定性。有关函数确定性的更多信息,请参见确定性函数和非确定性函数。

元数据函数

这些标量函数返回有关数据库和数据库对象的信息。

COL_LENGTHfn_listextendedproperty
COL_NAMEFULLTEXTCATALOGPROPERTY
COLUMNPROPERTYFULLTEXTSERVICEPROPERTY
DATABASEPROPERTYINDEX_COL
DATABASEPROPERTYEXINDEXKEY_PROPERTY
DB_IDINDEXPROPERTY
DB_NAMEOBJECT_ID
FILE_IDOBJECT_NAME
FILE_NAMEOBJECTPROPERTY
FILEGROUP_ID@@PROCID
FILEGROUP_NAMESQL_VARIANT_PROPERTY
FILEGROUPPROPERTYTYPEPROPERTY
FILEPROPERTY

所有元数据函数都具有不确定性。每次用一组特定的输入值调用它们时,所返回的结果不总是相同。有关函数确定性的更多信息,请参见确定性函数和非确定性函数。

安全函数

这些安全函数返回有关用户和角色的信息。

fn_trace_geteventinfoIS_SRVROLEMEMBER
fn_trace_getfilterinfoSUSER_SID
fn_trace_getinfoSUSER_SNAME
fn_trace_gettableUSER_ID
HAS_DBACCESSUSER
IS_MEMBER

所有的安全函数都具有不确定性。每次用一组特定的输入值调用它们时,所返回的结果不总是相同。有关函数确定性的更多信息,请参见确定性函数和非确定性函数。

系统函数

这些标量函数对 Microsoft® SQL Server™ 中的值、对象和设置进行操作并返回有关信息。

下表列出系统函数及其确定性属性。有关函数确定性的更多信息,请参见确定性函数和非确定性函数。

函数确定性
APP_NAME不具有确定性
CASE 表达式具有确定性
CAST 和 CONVERT 除非与 datetimesmalldatetimesql_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

这些文本和图像函数都是不确定性函数,每次调用它们时,即使是用相同的一组输入值,也可能返回不同的结果。有关函数确定性的更多信息,请参见确定性函数和非确定性函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值