金色的骷髅 发表于 2015-1-16 22:34:33

MYSQL教程之SQL数据操纵基本(中级)9

用户时常会发现其实自己并不是第一个选用MySQL数据库的先驱者。”数据转换数据

SQLSever充足壮大,能够在必要的时分把年夜部分数值从一品种型转换为另外一品种型。比方,要对照SMALLINT型和INT型数据的巨细,你不必要举行显式的范例转换。SQLSever会为你完成这项事情。可是,当你想在字符型数据和别的范例的数据之间举行转换时,你切实其实必要本人举行转换操纵。比方,假定你想从一个MONEY型字段中掏出一切的值,并在了局前面加上字符串“USDollars”。你必要利用函数CONVERT(),以下例所示:

SELECTCONVERT(CHAR(8),price)+’USDollars’FROMorders

函数CONVERT()带有两个变量。第一个变量指定了数据范例和长度。第二个变量指定了要举行转换的字段。在这个例子中,字段price被转换发展度为8个字符的CHAR型字段。字段price要被转换成字符型,才能够在它前面毗连上字符串’USDollars’。

当向BIT型,DATETIME型,INT型,大概NUMERIC型字段增加字符串时,你必要举行一样的转换操纵。比方,上面的语句在一个SELECT语句的查询了局中到场字符串’Thevoteis’,该SELECT语句前往一个BIT型字段的值:

SELECT‘Thevoteis’+CONVERT(CHAR(1),vote)FROMopinion

上面是这个语句的了局示例:

Thevoteis1

Thevoteis1

Thevoteis0

(3row(s)affected)

假如你不举行显式的转换,你会收到以下的毛病信息:

Implicitconversionfromdatatype‘varchar’to‘bit’isnotallowec.

UsetheCONVERTfunctiontorunthisquery.

操纵字符串数据

SQLSever有很多函数和表达式,使你能对字符串举行风趣的操纵,包含林林总总的形式婚配和字符转换。在这一节中,你将进修怎样利用最主要的字符函数和表达式。

婚配通配符

假定你想创建一个与Yahoo功效类似的Internet目次。你能够创建一个表用来保留一系列的站点称号,一致资本定位器(URL),形貌,和种别,并同意会见者经由过程在HTMLform中输出关头字来检索这些内容。

假设有一个会见者想从这个目次中失掉其形貌中包括关头字tradingcard的站点的列表。要掏出准确的站点列表,你大概试图利用如许的查询:

SELECTsite_nameFROMsite_directoryWHEREsite_desc=’tradingcard’

这个查询能够事情。可是,它只能前往那些其形貌中只要tradingcard这个字符串的站点。比方,一个形貌为Wehavethegreatestcollectionoftradingcardsintheworld!的站点不会被前往。

要把一个字符串与另外一个字符串的一部分相婚配,你必要利用通配符。你利用通配符和关头字LIKE来完成形式婚配。上面的语句利用通配符和关头字LIKE重写了下面的查询,以前往一切准确站点的名字:

SELECTSITE_nameFROMsite_directory

WHEREsite_descLIKE‘%tradingcark%’

在这个例子中,一切其形貌中包括表达式tradingcard的站点都被前往。形貌为Wehavethegreatestcollectionoftradingcardsintheworld!的站点也被前往。固然,假如一个站点的形貌中包括Iamtradingcardboardboxesonline,该站点的名字也被前往。

注重本例中百分号的利用。百分号是通配符的例子之一。它代表0个或多个字符。经由过程把tradingcard括在百分号中,一切个中嵌有字符串tradingcard的字符串都被婚配。

如今,假定你的站点目次变得太年夜而不克不及在一页中完整显现。你决意把目次分红两部分。在第一页,你想显现一切首字母在A到M之间的站点。在第二页,你想显现一切首字母在N到Z之间的站点。要失掉第一页的站点列表,你可使用以下的SQL语句:

SELECTsite_nameFROMsite_directoryWHEREsite_nameLIKE‘%’

在这个例子中利用了表达式,只掏出那些首字母在A到M之间的站点。中括号([])用来婚配处在指定局限内的单个字符。要失掉第二页中显现的站点,应利用这个语句:

SELECTsite_nameFROMsite_directory

WHEREsite_nameLIKE‘%’

在这个例子中,括号中的表达式代表任那边在N到Z之间的单个字符。

假定你的站点目次变得更年夜了,你如今必要把目次分红更多页。假如你想显现那些以A,B或C开首的站点,你能够用上面的查询来完成:

SELECTsite_nameFROMsite_directoryWHEREsite_nameLIKE‘%’

在这个例子中,括号中的表达式不再指定一个局限,而是给出了一些字符。任何一个其名字以这些字符中的任一个开首的站点都将被前往。

经由过程在括号内的表达式中同时包括一个局限和一些指定的字符,你能够把这两种办法分离起来。比方,用上面的这个查询,你能够掏出那些首字母在C到F之间,大概以字母Y开首的站点:

SELECTsite_nameFROMsite_directoryWHEREsite_nameLIKE‘%’

在这个例子中,名字为Collegescape和Yahoo的站点会被拔取,而名字为Magicw3的站点则不会被拔取。

你也能够利用脱字符(^)来扫除特定的字符。比方,要失掉那些名字不以Y开首的站点,你可使用以下的查询:

SELECTsite_nameFROMsite_directoryWHEREsite_nameLIKE‘[^Y]%’

对给定的字符或字符局限都可以利用脱字符。

最初,经由过程利用下划线字符(_),你能够婚配任何单个字符。比方,上面这个查询前往每个其名字的第二个字符为任何字母的站点:

SELECTsite_nameFROMsite_directoryWHEREsite_nameLIKE‘M_crosoft’

这个例子既前往名为Microsoft的站点,也前往名为Macrosoft的站点。可是,名字为Moocrosoft的站点则不被前往。与通配符’%’分歧,下划线只代表单个字符。

注重:

假如你想婚配百分号或下划线字符自己,你必要把它们括在方括号中。假如你想婚配连字符(-),应把它指定为方括号中的第一个字符。假如你想婚配方括号,应把它们也括在方括号中。比方,上面的语句前往一切其形貌中包括百分号的站点:

SELECTsite_nameFROMsite_directoryWHEREsite_descLIKE‘%[%]%’

婚配发音

MicrosoftSQL有两个同意你依照发音来婚配字符串的函数。函数SOUNDEX()给一个字符串分派一个音标码,函数DIFFERENCE()依照发音对照两个字符串。当你不晓得一个名字切实其实切拼写,但几晓得一点它的发音时,利用这两个函数将有助于你掏出该纪录。

比方,假如你创建一个Internet目次,你大概想增添一个选项,同意会见者依照站点名的发音来搜刮站点,而不是按名字的拼写。思索以下的语句:

SELECTsite_nameFROMsite_directory

WHEREDIFFERENCE(site_name,‘Microsoft’>3

这个语句利用函数DEFFERENCE()来获得其名字的发音与Microsoft十分类似的站点。函数DIFFERENCE()前往一个0到4之间的数字。假如该函数前往4,暗示发音十分邻近;假如该函数前往0,申明这两个字符串的发音相差很年夜。

比方,下面的语句将前往站点名Microsoft和Macrosoft。这两个名字的发音与Microsoft都很类似。假如你把上一语句中的年夜于3改成年夜于2,那末名为Zicrosoft和Megasoft的站点也将被前往。最初,假如你只必要不同品级年夜于1便可,则名为Picosoft和Minisoft的站点也将被婚配。

要深切懂得函数DIFFERENCE()是怎样事情的,你能够用函数SOUNDEX()来前往函数DIFFERENCE()所利用的音标码。这里有一个例子:

SELECTsite_name‘sitename’,SOUNDEX(site_name)‘soundslike’

这个语句拔取字段site_name的一切数据及其音标码。上面是这个查询的了局:

sitenamesoundslike

……………………………………………………………….

YahooY000

MahooM000

MicrosoftM262

MacrosoftM262

MinisoftM521

MicroshoftM262

ZicrosoftZ262

ZaposoftZ121

MillisoftM421

NanosoftN521

MegasoftM221

PicosoftP221

(12row(s)affected)

假如你细心看一下音标码,你会注重到音标码的第一个字母与字段值的第一个字母不异。比方,Yahoo和Mahoo的音标码只要第一个字母分歧。你还能够发明Microsoft和Macrosoft的音标码完整不异。

函数DIFFERENDE()对照两个字符串的第一个字母和一切的子音字母。该函数疏忽任何元音字母(包含y),除非一个元音字母是一个字符串的第一个字母。

不幸的是,利用SOUNDEX()和DIFFERENCE()有一个完善。WHERE子句中包括这两个函数的查询实行起来效果欠好。因而,你应当当心利用这两个函数。

删除空格

有两个函数,TTRIM()和LTRIM(),能够用来从字符串中剪失落空格。函数LTRIM()往除应当字符串后面的一切空格;函数RTRIM()往除一个字符串尾部的一切空格。这里有一个任何利用函数RTRIM()的例子:

SELECTRTRIM(site_name)FROMsite_directory

在这个例子中,假如任何一个站点的名字尾部有过剩的空格,过剩的空格将从查询了局中删往。

你能够嵌套利用这两个函数,把一个字符串前后的空格同时删往:

SELECTLTRIM(RTRIM(site_name)FROMsite_directory

你会发明,在从CHAR型字段中剪失落过剩的空格时,这两个函数十分有效。记着,假如你把一个字符串保留在CHAR型字段中,该字符串会被追加过剩的空格,以婚配该字段的长度。用这两个函数,你能够往失落无用的空格,从而办理这个成绩。
不管怎么样,市场的结果已经证明MySQL具有性价比高、灵活、MySQL学习教程广为使用和具有良好支持的特点。

小妖女 发表于 2015-1-19 13:08:47

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

兰色精灵 发表于 2015-1-24 12:50:24

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

小魔女 发表于 2015-2-1 13:28:47

分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。

金色的骷髅 发表于 2015-2-7 06:29:00

如果你是从“学习某一种数据库应用软件,从而获得应聘的资本和工作机会”的角度来问的话。

柔情似水 发表于 2015-2-20 20:56:30

分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。

山那边是海 发表于 2015-3-6 18:46:58

需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。

精灵巫婆 发表于 2015-3-13 06:06:11

其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?!
页: [1]
查看完整版本: MYSQL教程之SQL数据操纵基本(中级)9