《2022年如何查询mysql中执行效率低的sql语句 .pdf》由会员分享,可在线阅读,更多相关《2022年如何查询mysql中执行效率低的sql语句 .pdf(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、配置 f/my.ini,增加-log-slow-queries 配置,记录所有的slow query ,然后挨个优化本文来源于WEB 开发网原文链接: http:/ a=DRClass1, b=DRClass2, c=DRClass3, d=DRClass4, e=DRClass5 from Teacher Where TeacherID = TeacherID create table classname(classname char(50) insert into classname (classname) values (a) if (b is not null) begin inser
2、t into classname (classname) values (b) if (c is not null) begin insert into classname (classname) values (c) if (d is not null) begin insert into classname (classname) values (d) if (e is not null) begin insert into classname (classname) values (e) end end end end select * from classname 以上这些 SQL 语
3、句能不能转成一个存储过程?我自己试了下ALTER PROCEDURE Pr_GetClass TeacherID int, a char(50), b char(50), c char(50), d char(50), e char(50) as select a=DRClass1, b=DRClass2, c=DRClass3, d=DRClass4, e=DRClass5 from Teacher Where TeacherID = TeacherID DROP TABLE classname create table classname(classname char(50) 名师资料总结
4、 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 18 页 - - - - - - - - - insert into classname (classname) values (a) if (b is not null) begin insert into classname (classname) values (b) if (c is not null) begin insert into classname (classname) values (c) if (d is not
5、 null) begin insert into classname (classname) values (d) if (e is not null) begin insert into classname (classname) values (e) end end end end select * from classname 但是这样的话,这个存储过程就有6 个变量,实际上应该只提供一个变量就可以了主要的问题就是自己没搞清楚a,b,C,d 等是临时变量, 是放在 as 后面重新做一些申明的,而不是放在开头整个存储过程的变量定义。(标准化越来越近了):namespace prefix =
6、 o ns = urn:schemas-microsoft-com:office:office / 实战 SQL 语句收集 (不断更新中 -) 前言:这里将我编程实践中遇到的有价值的sql 语句一路记下来,一方面方便自己查用,一方面也夯实下即将遗忘的回忆。整个过程中我会不断更新,直到不能再加为止,同时, 这里只记录最实用的咚咚,不效仿学院派的那一套。一、常用SQL 语句荟萃1,查询:1.1,简单查询:select * from table where 1.2,连接查询:什么是连接查询?顾名释义,就是查询时涉及多个表的查询。是以说到连接,废话一下, 要知道连接还是关系数据库的主要特点呢。名师资料
7、总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 18 页 - - - - - - - - - 连接查询分为三种:外连接 (OUTER JOIN) , 内连接 (INNER JOIN) , 交叉连接 (CROSS JOIN) 。(标准化越来越近了):namespace prefix = st1 ns = urn:schemas-microsoft-com:office:smarttags /1.2.1 ,内连接 (INNER JOIN) 使用比较运算符进行表间某(些)列数据的比较操
8、作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。1.2.2,外连接分为左外连接(LEFT OUTER JOIN或 LEFT JOIN) 、右外连接 (RIGHT OUTER JOIN 或 RIGHT JOIN) 和全外连接 (FULL OUTER JOIN或 FULL JOIN) 三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时 )、 右表 (右外连接时 )或两个表 (全外连接时 )中所有符合搜索条件的数据行。1.2.3,交叉连接 (CROSS JOIN) 没有 WHERE 子句,它返回连接
9、表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。1.2.4,无论哪种连接都不能对text、ntext 和 image 数据类型列进行直接连接,但可以对这三种列进行间接连接。例如:SELECT p1.pub_id,p2.pub_id,p1.pr_info FROM pub_info AS p1 INNER JOIN pub_info AS p2 ON DATALENGTH(p1.pr_info)=DATA
10、LENGTH(p2.pr_info) 1.2.5,使用 WHERE 子句设置查询条件WHERE 子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20 的数据:SELECT * FROM usertable WHERE age20 WHERE 子句可包括各种条件运算符:比较运算符 (大小比较 ): 、=、=、=、! 、 !=10 AND age=30 2、列表运算符例:country IN (Germany,China) 3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、 varchar、text、ntext、datetime 和 smal
11、ldatetime 等类型查询。可使用以下通配字符:百分号 %:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%。下划线 _:匹配单个任意字符,它常用来限制表达式的字符长度。方括号 :指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 :其取值也 相同,但它要求所匹配对象为指定字符以外的任一个字符。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 18 页 - - - - - - - - - 例如:限制以 Publishing 结尾,使用LIKE %P
12、ublishing限制以 A 开头: LIKE A% 限制以 A 开头外: LIKE A% 空值判断符例:WHERE age IS NULL 2,更新: update table 3,插入:3.1,一般插入:INSERT INTO publishers (pub_id, pub_name, city, state) VALUES (9001, Acme Publishing, New Y ork, NY) 3.2,插入多行使用INSERT 语句可以向表添加多行数据。这些多行数据是从已经存有这些数据的另一个表中选取的。本例中,向pubhold 表中添加有关在加利福尼亚和德克萨斯州的出版商的数据。
13、这些数据可从publishers 表中获得。INSERT pubhpold SELECT * FROM publishers WHERE state = CA OR state = TX 4,删除:4.1,Delete 语句联合删除:DELETE FROM uu_SuiteToMinClassroomSect WHERE min_classroom_sect_id IN (SELECT min_classroom_sect_id FROM uu_MinClassroomSect WHERE min_classroom_id = 112) 二、视图使用细则1,一个典型的视图CREATE VIEW
14、 View_uuGroupTaxis AS SELECT uu_GroupInfo.group_id, uu_GroupInfo.group_name, uu_GroupType.main_type, uu_GroupType.group_type_name, uu_GroupInfo.group_icon_url, ISNULL (SELECT COUNT(*) FROM uu_GroupUser WHERE uu_GroupInfo.group_id = uu_GroupUser.group_id), 0) * 50 + ISNULL(uu_GroupInfo.fundCount, 0)
15、+ ISNULL (SELECT COUNT(*) FROM Dv_Topic WHERE Dv_Topic.BoardID = uu_GroupInfo.subforum_id), 0) * 5 + ISNULL (SELECT COUNT(*) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 18 页 - - - - - - - - - FROM uu_GroupPhotos WHERE uu_GroupPhotos.group_id = uu_GroupInfo.g
16、roup_id), 0) * 10 + ISNULL(uu_GroupInfo.topic_account, 0) * 2 + ISNULL(uu_GroupInfo.hit_account, 0) AS group_ActiveDegree, ISNULL (SELECT COUNT(*) FROM uu_GroupUser WHERE uu_GroupInfo.group_id = uu_GroupUser.group_id), 0) AS group_memberNum, ISNULL(uu_GroupInfo.fundCount, 0) AS fundCount, (SELECT CO
17、UNT(*) FROM Dv_Topic WHERE Dv_Topic.BoardID = uu_GroupInfo.subforum_id) AS group_articleNum, (SELECT COUNT(*) FROM uu_GroupPhotos WHERE uu_GroupPhotos.group_id = uu_GroupInfo.group_id) AS group_PhotoNum, uu_GroupInfo.topic_account, uu_GroupInfo.hit_account, (SELECT user_name FROM uu_RegisterUser WHE
18、RE uu_RegisterUser.user_id = uu_GroupInfo.creator_id) AS group_CreatorName, uu_GroupInfo.create_time FROM uu_GroupInfo INNER JOIN uu_GroupType ON uu_GroupInfo.group_type_id = uu_GroupType.group_type_id 三,存储过程的创建和调用1,存储过程的调用Execute procedureName param= value 2,一个典型的带参数存储过程CREATE PROCEDURE P_delMinicl
19、assProc miniClassroom_id int AS declare billtag varchar(4) set nocount on IF miniClassroom_id is null begin return(-1) end else BEGIN TRANSACTION -删除套餐信息DELETE FROM uu_SuiteToMinClassroomSect WHERE min_classroom_sect_id IN (SELECT min_classroom_sect_id 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - -
20、- - - - - 名师精心整理 - - - - - - - 第 5 页,共 18 页 - - - - - - - - - FROM uu_MinClassroomSect WHERE min_classroom_id =miniClassroom_id) -删除小课堂段信息delete from uu_MinClassroomSect where min_classroom_id = miniClassroom_id -删除小课堂用户购买记录delete from uu_UserBuyMinClassroom where min_classroom_id = miniClassroom_id
21、 -删除对应小课堂年级学科信息delete from uu_MinClassroomToGradeClass where min_classroom_id = miniClassroom_id -删除小课堂发言delete from uu_MinClassroomDiscuss where min_classroom_id = miniClassroom_id -删除课程讨论DELETE FROM uu_CourseDiscuss WHERE course_id IN (SELECT course_id FROM uu_CourseInfo WHERE min_classroom_id = m
22、iniClassroom_id) -删除用户课程收藏 SQL 语句的优化是将性能低下的SQL 语句转换成目的相同的性能优异的SQL 语句。人工智能自动SQL 优化就是使用人工智能技术,自动对 SQL 语句进行重写, 从而找到性能最好的等效SQL 语句。数据库性能的优化一个数据库系统的生命周期可以分成:设计、 开发和成品三个阶段。在设计阶段进行数据库性能优化的成本最低,收益最大。 在成品阶段进行数据库性能优化的成本最高,收益最小。数据库的优化通常可以通过对网络、硬件、 操作系统、 数据库参数和应用程序的优化来进行。最常见的优化手段就是对硬件的升级。根据统计,对网络、硬件、操作系统、数据库参数进行
23、优化所获得的性能提升,全部加起来只占数据库系统性能提升的40%左右,其余的 60%系统性能提升来自对应用程序的优化。许多优化专家认为,对应用程序的优化可以得到 80%的系统性能的提升。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 18 页 - - - - - - - - - 应用程序的优化应用程序的优化通常可分为两个方面:源代码和SQL 语句。由于涉及到对程序逻辑的改变,源代码的优化在时间成本和风险上代价很高,而对数据库系统性能的提升收效有限。为什么要优化SQL 语句.
24、 SQL 语句是对数据库进行操作的惟一途径,对数据库系统的性能起着决定性的作用。. SQL 语句消耗了70%至 90%的数据库资源。. SQL 语句独立于程序设计逻辑,对SQL 语句进行优化不会影响程序逻辑。. SQL 语句有不同的写法,在性能上的差异非常大。. SQL 语句易学,但难精通。优化 SQL 语句的传统方法是通过手工重写来对SQL 语句进行优化。DBA 或资深程序员通过对SQL 语句执行计划的分析,依靠经验,尝试重写SQL 语句,然后对结果和性能进行比较, 以试图找到性能较佳的SQL 语句。 这种传统上的作法无法找出SQL 语句的所有可能写法,且依赖于人的经验,非常耗费时间。SQL
25、 优化技术的发展历程第一代 SQL 优化工具是执行计划分析工具。这类工具针对输入的SQL 语句, 从数据库提取执行计划,并解释执行计划中关键字的含义。第二代 SQL 优化工具只能提供增加索引的建议,它通过对输入的SQL 语句的执行计划的分析,来产生是否要增加索引的建议。第三代 SQL 优化工具不仅分析输入SQL 语句的执行计划,还对输入的SQL 语句本身进行语法分析,经过分析产生写法上的改进建议。人工智能自动SQL 优化图 1 人工智能自动SQL 优化示意图人工智能自动SQL 优化出现在90 年代末。目前在商用数据库领域,LECCO Technology Limited( 灵高科研有限公司)拥
26、有该技术,并提供使用该技术的自动优化产品LECCO SQL Expert,它支持Oracle(大型网站数据库平台)、 Sybase、MS sql server(WINDOWS平台上强大的数据库平台)和 IBM DB2 数据库平台。 该产品针对数据库应用的开发和维护阶段提供的模块有: SQL 语法优化器、 PL/SQL 集成化开发调试环境(IDE) 、扫描器、数据库监视器等。其核心模块SQL 语法优化器的工作原理为:输入一条源SQL 语句; “人工智能反馈式名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - -
27、- - - - 第 7 页,共 18 页 - - - - - - - - - 搜索引擎”对输入的SQL 语句,结合检测到的数据库结构和索引进行重写,产生N 条等效的 SQL 语句输出; 产生的N 条等效 SQL 语句再送入 “人工智能反馈式搜索引擎”进行重写,直至无法产生新的输出或搜索限额满;对输出的SQL 语句进行过滤,选出具有不同执行计划的SQL 语句;对得到的SQL 语句进行批量测试,找出性能最好的SQL 语句。LECCO SQL Expert 自动优化实例假设我们从源代码中抽取出这条SQL 语句 (也可以通过内带的扫描器或监视器获得SQL语句 ):SELECT COUNT(*) FRO
28、M EMPLOYEE swheresEXISTS (SELECT X FROM DEPARTMENT swheresEMP_DEPT=DPT_ID AND DPT_NAME LIKE AC%) AND EMP_ID IN (SELECT SAL_EMP_ID FROM EMP_SAL_HIST B swheresSAL_SALARY70000) 按下“优化”按钮后,经过10 几秒, SQL Expert 就完成了优化的过程,并在这10 几秒的时间里重写产生了2267 条等价的 SQL 语句,其中136 条 SQL 语句有不同的执行计划。接下来,我们可以对自动重写产生的136 条 SQL 语句进
29、行批运行测试,以选出性能最佳的等效SQL 语句。按下“批运行”按钮,在“终止条件”页选择“最佳运行时间SQL语句” ,按“确定” 。经过几分钟的测试运行后,我们可以发现SQL124 的运行时间和反应时间最短。运行速度约有 22.75 倍的提升 (源 SQL 语句运行时间为2.73 秒,SQL124 运行时间为0.12 秒)。 现在我们就可以把SQL124 放入源代码中,结束一条SQL 语句的优化工作了。“边做边学式训练”提升SQL 开发水平LECCO SQL Expert 不仅能够找到最佳的SQL 语句, 它所提供的 “边做边学式训练”还能够教开发人员和数据库管理员如何写出性能最好的SQL语句
30、。LECCO SQL Expert 的 “SQL比较器”可以标明源SQL 和待选 SQL 间的不同之处。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 18 页 - - - - - - - - - 以上面优化的结果为例,为了查看源SQL 语句和 SQL124 在写法上有什么不同,我们可以按下 “比较器”按钮, 对 SQL124 和源 SQL 语句进行比较。“SQL 比较器” 将 SQL124相对于源SQL 语句的不同之处以蓝颜色表示了出来。如果选择“双向比较”复选框,“S
31、QL 比较器”可以将两条SQL 语句的不同之处以蓝色表示。当然,我们也可以从源语句和重写后的 SQL 语句中任选两条进行比较。从比较的结果可以看到,重写后的 SQL124 把第一个Exists 改写成了 In; 在字段 DPT_ID上进行了合并空字符串的操作,以诱导数据库先执行子查询中的(SELECT DPT_ID| FROM DEPARTMENT WHERE DPT_NAME LIKE AC%) 在子查询完成后,再与EMPLOYEE 表进行嵌套循环连接(Nested Loop Join) 。如果觉得对写法的改变难以理解,还可以点中 “执行计划” 复选框, 通过比较两条SQL语句的执行计划的不
32、同,来了解其中的差异。在查看执行计划过程中,如果有什么不明白的地方,可以点中“SQL 信息按钮”,再点击执行计划看不明白的地方,LECCO SQL Expert的上下文敏感帮助系统将提供执行计划该处的解释。在“ SQL 比较器”中,选中“统计信息”复选框后,可得到详细的两条SQL 语句运行时的统计信息比较,这对于学习不同的SQL 写法对数据库资源的消耗很有帮助。LECCO SQL Expert 优化模块的特点LECCO SQL Expert 优化模块的特点主要表现为:自动优化SQL 语句; 以独家的人工智能知识库“反馈式搜索引擎”来重写性能优异的SQL 语句;找出所有等效的SQL 语句及可能的
33、执行计划;保证产生相同的结果;先进的SQL 语法分析器能处理最复杂的SQL 语句;可以重写SELECT、SELECT INTO 、UPDATE、INSERT 和 DELETE 语句;通过测试运行,为应用程序和数据库自动找到性能最好的SQL 语句;提供微秒级的计时,能够优化Web 应用程序和有大量用户的在线事务处理中运行时间很短的SQL 语句;为开发人员提供“边做边学式训练” ,迅速提高开发人员的SQL 编程技能; 提供上下文敏感的执行计划帮助系统和SQL 运行状态帮助;不是猜测或建议,而是独一无二的SQL 重写解决方案。写出专家级的SQL 语句LECCO SQL Expert 的出现,使SQL
34、 的优化变得极其简单,只要能够写出SQL 语句,它就能帮用户找到最好性能的写法。LECCO SQL Expert 不仅能在很短的时间内找到所有可能的优化方案, 而且能够通过实际测试,确定最有效的优化方案。同以往的数据库优化手段相比较, LECCO SQL Expert 将数据库优化技术带到了一个崭新的技术高度,依赖人的经验、耗费大量时间、 受人的思维束缚的数据库优化手段已经被高效、省时且准确的自动优化软件名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 18 页 - - -
35、 - - - - - - 所取代了。通过内建的“LECCO 小助手”的帮助,即使是SQL 的开发新手,也能快速且简单地写出专家级的SQL 语句。比如现在有一人员表(表名: peosons)若想将姓名、身份证号、住址这三个字段完全相同的记录查询出来select p1.* from persons p1,persons p2 where p1.idp2.id and p1.cardid = p2.cardid and p1.pname = p2.pname and p1.address = p2.address 可以实现上述效果select 语句前加:declare d datetime set
36、d=getdate() 并在 select 语句后加:select 语句执行花费时间(毫秒)=datediff(ms,d,getdate() Transact_SQL 小手册*Transact_SQL* -语 句功 能-数据操作SELECT -从数据库表中检索数据行和列INSERT -向数据库表添加新数据行DELETE -从数据库表中删除数据行UPDATE -更新数据库表中的数据-数据定义CREATE TABLE -创建一个数据库表DROP TABLE -从数据库中删除表ALTER TABLE -修改数据库表结构CREATE VIEW -创建一个视图DROP VIEW -从数据库中删除视图CR
37、EATE INDEX -为数据库表创建一个索引DROP INDEX -从数据库中删除索引CREATE PROCEDURE -创建一个存储过程DROP PROCEDURE -从数据库中删除存储过程CREATE TRIGGER -创建一个触发器DROP TRIGGER -从数据库中删除触发器CREATE SCHEMA-向数据库添加一个新模式DROP SCHEMA-从数据库中删除一个模式CREATE DOMAIN -创建一个数据值域ALTER DOMAIN -改变域定义DROP DOMAIN -从数据库中删除一个域名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - -
38、- - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 18 页 - - - - - - - - - -数据控制GRANT -授予用户访问权限DENY-拒绝用户访问REVOKE -解除用户访问权限-事务控制COMMIT - 结束当前事务ROLLBACK -中止当前事务SET TRANSACTION - 定义当前事务数据访问特征-程序化 SQL DECLARE -为查询设定游标EXPLAN -为查询描述数据访问计划OPEN -检索查询结果打开一个游标FETCH -检索一行查询结果CLOSE -关闭游标PREPARE -为动态执行准备SQL 语句EXECUTE -动
39、态地执行SQL 语句DESCRIBE -描述准备好的查询- 局部变量declare id char(10) -set id = 10010001 select id = 10010001 - 全局变量- 必须以 开头-IF ELSE declare x int y int z int select x = 1 y = 2 z=3 if x y print x y - 打印字符串 x y else if y z print y z else print z y -CASE use pangu update employee set e_wage = case when job_level = 1
40、 then e_wage*1.08when job_level = 2 then e_wage*1.07when job_level = 3 then e_wage*1.06else e_wage*1.05 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 18 页 - - - - - - - - - end -WHILE CONTINUE BREAK declare x int y int c int select x = 1 y=1 while x 3 begin p
41、rint x - 打印变量 x 的值while y 3 begin select c = 100*x + y print c - 打印变量c 的值select y = y + 1 end select x = x + 1 select y = 1 end -WAITFOR -例 等待 1 小时 2 分零 3 秒后才执行SELECT 语句waitfor delay 01:02:03select * from employee -例 等到晚上11 点零 8 分后才执行SELECT 语句waitfor time 23:08:00select * from employee *SELECT* sele
42、ct *( 列名 ) from table_name(表名 ) where column_name operator value ex:(宿主 ) select * from stock_information where stockid = str(nid) stockname = str_name stockname like % find this % stockname like a-zA-Z% - (指定值的范围 ) stockname like F-M% - ( 排除指定范围 ) - 只能在使用like 关键字的where 子句中使用通配符) or stockpath = stoc
43、k_path or stocknumber =表达式的最小整数返回的数据类型与表达式相同可为-INTEGER/MONEY/REAL/FLOAT 类型FLOOR(numeric_expression) -返回 =表达式的最小整数返回的数据类型与表达式相同可为-INTEGER/MONEY/REAL/FLOAT 类型ROUND(numeric_expression) -返回以integer_expression 为精度的四舍五入值返回的数据-类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型ABS(numeric_expression) -返回表达式的绝对值返回的数据类型与表
44、达式相同可为-INTEGER/MONEY/REAL/FLOAT 类型SIGN(numeric_expression) -测试参数的正负号返回0 零值1 正数或 -1 负数返回的数据类型-与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型PI() -返回值为 即 3.1415926535897936 RAND(integer_expression) -用任选的 integer_expression做种子值得出0-1 间的随机浮点数- 字符串函数 - ASCII() -函数返回字符表达式最左端字符的ASCII 码值CHAR() -函数用于将ASCII 码转换为字符-如果没有输入
45、0 255 之间的 ASCII 码值 CHAR 函数会返回一个NULL 值名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 18 页 - - - - - - - - - LOWER() -函数把字符串全部转换为小写UPPER() -函数把字符串全部转换为大写STR() -函数把数值型数据转换为字符型数据LTRIM() -函数把字符串头部的空格去掉RTRIM() -函数把字符串尾部的空格去掉LEFT(),RIGHT(),SUBSTRING() -函数返回部分字符串CHARI
46、NDEX(),PA TINDEX() -函数返回字符串中某个指定的子串出现的开始位置SOUNDEX() -函数返回一个四位字符码-SOUNDEX 函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回 0 值DIFFERENCE() -函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异-0 两个 SOUNDEX 函数返回值的第一个字符不同-1 两个 SOUNDEX 函数返回值的第一个字符相同-2 两个 SOUNDEX 函数返回值的第一二个字符相同-3 两个 SOUNDEX 函数返回值的第一二三个字符相同-4 两个 SOUNDEX 函数返回值完全相同QUOTENAME(
47、) -函数返回被特定字符括起来的字符串/*select quotename(abc, ) quotename(abc) 运行结果如下- abc abc*/ REPLICATE() -函数返回一个重复character_expression 指定次数的字符串/*select replicate(abc, 3) replicate( abc, -2) 运行结果如下- - abcabcabc NULL*/ REVERSE() -函数将指定的字符串的字符排列顺序颠倒REPLACE() -函数返回被替换了指定子串的字符串/*select replace(abc123g, 123, def) 运行结果如下
48、- - abcdefg*/ SPACE() -函数返回一个有指定长度的空白字符串STUFF() -函数用另一子串替换字符串指定位置长度的子串- 数据类型转换函数- CAST() 函数语法如下CAST() ( AS length ) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 18 页 - - - - - - - - - CONVERT() 函数语法如下CONVERT() ( length , , style) select cast(100+99 as char)
49、convert(varchar(12), getdate() 运行结果如下- - 199 Jan 15 2000 - 日期函数 - DAY() - 函数返回 date_expression 中的日期值MONTH() -函数返回date_expression 中的月份值YEAR() - 函数返回 date_expression 中的年份值DATEADD( , ,) -函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期DATEDIFF( , ,) -函数返回两个指定日期在datepart 方面的不同之处DATENAME( , ) -函数以字符串的形式返回日期的指定部分DAT
50、EPART( , ) - 函数以整数值的形式返回日期的指定部分GETDATE() -函数以 DATETIME 的缺省格式返回系统当前的日期和时间- 系统函数 - APP_NAME() -函数返回当前执行的应用程序的名称COALESCE() -函数返回众多表达式中第一个非NULL 表达式的值COL_LENGTH(, ) -函数返回表中指定字段的长度值COL_NAME(, ) - 函数返回表中指定字段的名称即列名DATALENGTH() -函数返回数据表达式的数据的实际长度DB_ID(database_name) - 函数返回数据库的编号DB_NAME(database_id) -函数返回数据库的