|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
用户时常会发现其实自己并不是第一个选用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]%’
在这个例子中利用了表达式[A-M],只掏出那些首字母在A到M之间的站点。中括号([])用来婚配处在指定局限内的单个字符。要失掉第二页中显现的站点,应利用这个语句:
SELECTsite_nameFROMsite_directory
WHEREsite_nameLIKE‘[N-Z]%’
在这个例子中,括号中的表达式代表任那边在N到Z之间的单个字符。
假定你的站点目次变得更年夜了,你如今必要把目次分红更多页。假如你想显现那些以A,B或C开首的站点,你能够用上面的查询来完成:
SELECTsite_nameFROMsite_directoryWHEREsite_nameLIKE‘[ABC]%’
在这个例子中,括号中的表达式不再指定一个局限,而是给出了一些字符。任何一个其名字以这些字符中的任一个开首的站点都将被前往。
经由过程在括号内的表达式中同时包括一个局限和一些指定的字符,你能够把这两种办法分离起来。比方,用上面的这个查询,你能够掏出那些首字母在C到F之间,大概以字母Y开首的站点:
SELECTsite_nameFROMsite_directoryWHEREsite_nameLIKE‘[C-FY]%’
在这个例子中,名字为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学习教程广为使用和具有良好支持的特点。 |
|