萌萌妈妈 发表于 2015-1-16 22:50:57

MYSQL网页编程之T-SQL 查询中利用的函数之体系函数

据我的观察,现在有一个趋势,那些经过正式培训的数据库管理员DBA更倾向于选择一个专有关系数据库,例如Oracle。对于一些具有专门数据库管理员的比较大的环境来说,MySQL很难得到宠爱,这时候,关于MySQL是否真的具有良好的可扩展性的争论已经没有意义。函数
查询中利用的函数

在查询语句中,不但可查询表中列的值并且可使用外部函数查询数据库中分歧范例的信息。能够在SELECT列表,WHERE子句和任何同意表达式的中央利用外部函数。这些函数都是T-SQL对SQL的扩大。AdaptiveServer供应的外部函数能够分红以下几类:

l体系函数。前往数据库中的信息;

l字符串函数。用于处置字符串或字符串表达式;

ltext函数。用于处置text和image范例的数据;

l数学范例。用于处置三角、多少和别的数据处置的函数;

l日期函数。处置datetime和smalldatetime范例的数据;

l数据范例转换函数(convert)。用于将一种数据范例转换成另外一种数据范例,也可将日期格局化成各类情势。

l平安函数。前往平安服务和用户自界说脚色的信息

1、体系函数

体系函数从数据库前往特定的信息,它们中的年夜多半供应了查询体系表的烦琐体例。

体系函数的一样平常语法:

selectfunction_name(argument)

体系函数能够用在选择项里、where子句里和任何同意表达式存在的中央。比方:假如要查询“zyf”的用户标示号,则输出:

select“用户标示号”=user_id(“zyf”)





了局:

用户标示号

——

3

一样平常来讲,函数名暗示里将前往甚么样的信息。

User_name用ID号作参数而前往用户的名字。以下,假如查询ID号为3的用户名

Select“用户名”=user_name(3)

了局:

用户名

——

zyf

找出以后用户的名字(也就是正在利用的用户名)

selectuser_name()

了局:

用户名

——

dbo

AdaptiveServer依照以下的划定规矩处置用户标示符:

l当体系办理员成为他利用的数据库的一切者时,其上岸用户ID被指定为1;

lguest用户的上岸用户ID老是-1

l数据库一切者的用户老是dbo,他的用户ID是1;

lguest用户的ID是2



体系函数表

函数名

参数

前往了局

Col_name

(object_id,column_id[,database_id])

列名

Col_length

(object_name,column_name)

列的界说长度(利用datalength是检察实践数据的长度)

curunreservedpgs

(dbid,lstart,unreservedpgs)

磁盘片中的余暇页数。假如数据库是翻开的,则该值来自于内存;假如数据库没有翻开则该值来自于体系表sysusages中列unreservedpgs

Data_pgs

(object_id,{doampg|ioampg})

被表(doampg)或索引(ioampg)利用的页数。该了局不包含外部了局利用的页数

Datalength

(expression)

前往expression的长度。Expression能够是列名也能够是字符串常量。假如是列名则前往列中实践数据的长度。

Db_id

()

数据库的ID号。数据库名必需为字符表达式,假如数据库名为字符常量,则必需用引号将其引发来。假如没有给出数据库名,则前往以后数据库的ID号

Db_name

()

数据库名。Database_id必需是数值表达式假如没有给出database_id,则前往以后数据库名。

Host_id

()

客户历程(非AdaptiveServer历程)确当前主机名

Host_name

()

索引列名。假如object_name不是表名或视图名,则前往NULL

Index_col

(object_name,index_id,key_#[,user_id])

当expression1为NULL时,用expression2的值来取代expression1的值。表达式的值必需可隐式地转化,不然必需利用convert函数

Isnull

(expression1,expression2)

办理日记段的最初机?值。Lastchance:在指定的数据库中创立一个最初时机值;当指定命据库的最初时机值被凌驾时前往1,不然前往0;unsuspend:用以叫醒数据库中挂起的义务而且当最初时机值被凌驾时利用该时机值有效;reserve:前往要乐成地转储指定巨细的一个事件日记时所需的自在日记页的数量。

Lct_admin

({{“lastchance”|”logfull”|”unsuspend”}

,database_id}|

“reserve”

,log_pages})

分派给表或索引的页数

Reserved_pgs

(object_id,{doampg|ioampg})

表中行数的估量值

Rowent

(doampg)

数据库工具ID号

Object_id

(“objname”)

数据库工具名

Object_name

(obj_id)

从表syslogins中前往服务器用的ID号,假如没有给出参数server_user_name的值则前往以后用户的服务器ID号

Suser_id

()

前往服务器用户名,服务器用户的ID号存储在表syslogins中,假如没有给出参数server_user_id的值,则前往以后用户名。

Tsequal

(timestamp,timestamp2)

在扫瞄形式下,对照timestamp的值以制止提交那些被修正过的值。Timestamp是被扫瞄行的工夫标记;timestamp2是存储行的工夫标记。该函数同意用户不挪用db_library而利用扫瞄形式。

Used_pgs

(object_id,doampg,ioampg)

由表和聚簇索引利用的列数

User



用户名

User_id

()

用户的ID号。呈报以后数据库中的用户ID号,假如没有给出参数user_name,前往以后用户的ID号。

User_name

()

前往与以后数据库的用户ID号绝对应的用户名。假如没有供应参数user_id的值,则前往以后用户名。

Valid_name

(character_expression)

假如character_expression是有效的标识符(不法字符或长度凌驾了30),则前往0;不然前往非0数值

Valid_user

(server_user_id)

假如指定的ID号在AdaptiveServer的最少一个数据库中有其对应的用户名或别号,则前往1;只要sa_role或sso_role脚色的用户才可使用该函数。



例子:

1、找出表titles中title列的长度

slelect“题目长度”=col_length(“article”,”title”)

了局:

题目长度

-----

120

2、找出表article中title列中数据的长度

selectlength=datalength(title),title

fromarticle

了局:

lengthtitle

24软泄漏其internet战略

20A推出两种收集新软件

21IBM公布新版SYSTEMVIEW

3、查找一切作家的人为,假如人为为NULL值则交换成$10.00

selectisnull(salary,$10.00)

fromauths

了局:

——

120.00

100.00

110.00

10.00

4、查出体系表sysusers中的用户ID为1的用户名

selectnameformsysusers

wherename=user_name(1)

了局:

name

——

dbo


你碰到的问题可能已经在社区中被别的人已经问过,即使没有MySQL学习教程,你也可以提出问题或通过Google来搜索答案。社区的相关负责人士:“MySQL社区是活跃、友好和内容渊博的。”

深爱那片海 发表于 2015-1-20 05:39:56

作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!

愤怒的大鸟 发表于 2015-1-28 19:13:37

只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。

冷月葬花魂 发表于 2015-2-5 22:35:48

Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。

谁可相欹 发表于 2015-2-13 23:53:18

同样会为索引视图等应用带来麻烦。看看行级和事务级的快照数据放在tempdb中,就能感觉到目前架构的尴尬。

再现理想 发表于 2015-3-4 03:16:40

分区表效率问题肯定是大家关心的问题。在我的试验中,如果按照分区字段进行的查询(过滤)效率会高于未分区表的相同语句。但是如果按照非分区字段进行查询,效率会低于未分区表的相同语句。

第二个灵魂 发表于 2015-3-11 15:45:41

而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。

若相依 发表于 2015-3-19 01:33:09

然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情

精灵巫婆 发表于 2015-3-27 02:08:08

需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。
页: [1]
查看完整版本: MYSQL网页编程之T-SQL 查询中利用的函数之体系函数