文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-694782.html
1.?盡管SQL標(biāo)準(zhǔn)指定了部分函數(shù),但數(shù)據(jù)庫(kù)廠商并沒(méi)有遵循這些函數(shù)規(guī)范
2.?字符串
2.1.?char
2.1.1.?固定長(zhǎng)度、不足部分用空格填充的字符串
2.1.2.?MySQL允許的char類(lèi)型的最大長(zhǎng)度為255個(gè)字符
2.1.3.?Oracle Database允許的最大長(zhǎng)度為2,000個(gè)字符
2.1.4.?SQL Server允許的最大長(zhǎng)度為8,000個(gè)字符
2.2.?varchar
2.2.1.?變長(zhǎng)字符串
2.2.2.?MySQL允許的varchar類(lèi)型的最大長(zhǎng)度為65,536個(gè)字符
2.2.3.?Oracle Database(通過(guò)varchar2類(lèi)型)允許的最大長(zhǎng)度為4,000個(gè)字符
2.2.4.?SQL Server允許的最大長(zhǎng)度為8,000個(gè)字符
2.3.?text
2.3.1.?MySQL和SQL Server
2.4.?clob
2.4.1.?Oracle Database
2.5.?保存非常大的可變長(zhǎng)字符串
2.5.1.?文檔
2.5.2.?MySQL有多種text類(lèi)型(tinytext、text、mediumtext和longtext),可用于最大4GB的文檔
2.5.3.?SQL Server為最大2GB的文檔提供了單一的text類(lèi)型
2.5.3.1.?SQL Server 2005還包括varchar(max)數(shù)據(jù)類(lèi)型,并建議使用其代替text類(lèi)型,text類(lèi)型將在未來(lái)的某個(gè)版本中被刪除
2.5.4.?Oracle Database包括clob數(shù)據(jù)類(lèi)型,可保存最大為128TB的巨大文檔
2.6.?可以配置MySQL和SQL Server以實(shí)現(xiàn)悄無(wú)聲息地截?cái)嘧址?,而不是拋出異?/h2>
2.7.?從MySQL 6.0版開(kāi)始,默認(rèn)行為是“strict”模式,意味著在發(fā)生問(wèn)題時(shí)拋出異常,而在早先版本的服務(wù)器中,字符串會(huì)被截?cái)?,并發(fā)出警告,如果希望數(shù)據(jù)庫(kù)引擎采取這種方式,可以選擇ANSI模式
2.8.?避免字符串被截?cái)啵ɑ蚴窃贠racle Database和MySQL的strict模式下拋出異常)的最好方法是將列長(zhǎng)度的上限設(shè)置得足夠大,以容納可能存儲(chǔ)在其中的最長(zhǎng)的字符串(服務(wù)器只會(huì)分配足以存儲(chǔ)字符串的空間,所以為varchar列設(shè)置長(zhǎng)度更大的上限并不會(huì)浪費(fèi)存儲(chǔ)資源
2.9.?包含單引號(hào)
2.9.1.?需要在字符串中添加轉(zhuǎn)義字符,以便服務(wù)器將字符串中的撇號(hào)視為普通字符
2.9.2.?直接在單引號(hào)前再添加一個(gè)單引號(hào)進(jìn)行轉(zhuǎn)義
2.9.3.?mysql
-> UPDATE string_tbl
-> SET text_fld = 'This string didn''t work, but it does now';
2.9.4.?Oracle Database和MySQL用戶(hù)也可以選擇使用反斜杠字符來(lái)轉(zhuǎn)義單引號(hào)
2.9.5.?sql
UPDATE string_tbl SET text_fld =
?'This string didn\'t work, but it does now'
2.9.6.?如果要檢索字符串,以用于屏幕顯示或報(bào)表字段,則無(wú)須對(duì)內(nèi)嵌引號(hào)作任何特殊處理
2.9.7.?如果要將檢索出的字符串添加到其他程序要讀取的文件中,就需要將轉(zhuǎn)義字符加入字符串
2.9.7.1.?如果使用的是MySQL,可以通過(guò)內(nèi)建函數(shù)quote()來(lái)實(shí)現(xiàn),該函數(shù)會(huì)將整個(gè)字符串放入引號(hào)內(nèi)并對(duì)其中任意的引號(hào)/撇號(hào)進(jìn)行轉(zhuǎn)義
2.9.7.2.?mysql
-> SELECT quote(text_fld)
-> FROM string_tbl;
2.9.7.3.?在檢索數(shù)據(jù)用于數(shù)據(jù)導(dǎo)出時(shí),可以對(duì)所有非系統(tǒng)生成的字符列(比如customer_notes列)使用quote()函數(shù)
2.10.?包含特殊字符
2.10.1.?SQL Server和MySQL服務(wù)器包含內(nèi)建函數(shù)char()
2.10.2.?Oracle Database用戶(hù)可以使用chr()函數(shù)
2.10.3.?用于從ASCII字符集的255個(gè)字符中任意構(gòu)建字符串
2.10.4.?需要熟悉字符集的布局,從中定位特定的字符
2.10.5.?可以使用concat()函數(shù)來(lái)拼接若干字符串,可以自行輸入這些字符串,也可以通過(guò)char()函數(shù)生成
2.10.5.1.?Oracle Database用戶(hù)可以使用拼接運(yùn)算符(||)代替concat()函數(shù)
2.10.5.2.?SQL Server并未提供concat()函數(shù),需要使用拼接運(yùn)算符(+)代替
2.10.6.?可以使用ascii()函數(shù),該函數(shù)接受字符串最左側(cè)的字符,并返回其編碼數(shù)值
2.10.7.?使用char()、ascii()和concat()函數(shù)(或者拼接運(yùn)算符),應(yīng)該能夠處理任何羅馬字符,即使所用的鍵盤(pán)不包括重音字符或其他特殊字符
2.10.8.?返回?cái)?shù)值的字符串函數(shù)
2.10.8.1.?length()
2.10.8.1.1.?該函數(shù)返回字符串所包含的字符數(shù)
2.10.8.1.2.?SQL Server用戶(hù)需要使用len()函數(shù)
2.10.8.2.?position()函數(shù)
2.10.8.2.1.?字符串中查找子串的位置
2.10.8.2.2.?在使用數(shù)據(jù)庫(kù)時(shí),一定要記住,字符串的第一個(gè)字符的位置為1
2.10.8.2.3.?如果沒(méi)有找到指定的子串,position()函數(shù)返回0
2.10.8.2.4.?SQL:2003標(biāo)準(zhǔn)的一部分
2.10.8.3.?locate()函數(shù)
2.10.8.3.1.?MySQL專(zhuān)有的
2.10.8.3.2.?從目標(biāo)字符串的其他位置開(kāi)始搜索
2.10.8.3.3.?可以接受可選的第3個(gè)參數(shù),該參數(shù)用于指定搜索的起始位置
2.10.8.4.?instr()函數(shù)
2.10.8.4.1.?Oracle Database專(zhuān)有
2.10.8.4.2.?Oracle Database未提供函數(shù)position()或locate()
2.10.8.4.3.?該函數(shù)在使用兩個(gè)參數(shù)時(shí),能夠模擬position()函數(shù)
2.10.8.4.4.?使用三個(gè)參數(shù)時(shí),能夠模擬locate()函數(shù)
2.10.8.4.5.?返回值0 表示沒(méi)有找到指定的子串,而不是表示該子串位于字符串的位置0
2.10.8.5.?charindx()函數(shù)
2.10.8.5.1.?SQL Server專(zhuān)有
2.10.8.5.2.?SQL Server也沒(méi)有提供position()或locate()函數(shù)
2.10.8.5.3.?該函數(shù)和Oracle的instr()函數(shù)類(lèi)似,也可以接受兩個(gè)或三個(gè)參數(shù)
2.10.8.6.?strcmp()
2.10.8.6.1.?MySQL專(zhuān)有
2.10.8.6.1.1.?不區(qū)分大小寫(xiě)
2.10.8.6.2.?無(wú)法在Oracle Database和SQL Server中模擬
2.10.8.6.3.?一個(gè)接受字符串作為參數(shù)并返回?cái)?shù)值的字符串比較函數(shù)
2.10.8.6.3.1.??1(第一個(gè)字符串的排序位于第二個(gè)字符串之前)
2.10.8.6.3.2.?0(兩個(gè)字符串相同)
2.10.8.6.3.3.?1(第一個(gè)字符串的排序位于第二個(gè)字符串之后)
2.10.8.6.4.?MySQL還允許在select子句中使用運(yùn)算符like和regexp來(lái)比較字符串
2.10.8.6.4.1.?比較的結(jié)果為1(true)或0(false)
2.10.9.?返回字符串的字符串函數(shù)
2.10.9.1.?concat()函數(shù)
2.10.9.1.1.?通過(guò)數(shù)據(jù)片段構(gòu)建字符串
2.10.9.1.2.?Oracle中使用,可以使用拼接運(yùn)算符(||)來(lái)代替
2.10.9.1.3.?SQL Server的拼接運(yùn)算符(+)代替||
2.10.9.2.?在字符串中間添加或替換部分字符
2.10.9.2.1.?insert()函數(shù)
2.10.9.2.1.1.?MySQL提供的函數(shù)接受4個(gè)參數(shù):原始字符串、起始位置、要替換的字符數(shù)量和替換字符串
2.10.9.2.1.2.?mysql> SELECT INSERT('goodbye world', 1, 7, 'hello') string;
2.10.9.2.2.?replace()函數(shù)
2.10.9.2.2.1.?Oracle Database
2.10.9.2.2.2.?SELECT REPLACE('goodbye world', 'goodbye', 'hello') FROM dual;
2.10.9.2.3.?SQL Server也有replace()函數(shù),其功能與Oracle Database的相同
2.10.9.2.4.?SQL Server還提供了與MySQL的insert()函數(shù)功能相似的stuff()函數(shù)
2.10.9.2.4.1.?SELECT STUFF('hello world', 1, 5, 'goodbye cruel')
2.10.9.2.5.?從字符串中提取子串
2.10.9.2.5.1.?三種數(shù)據(jù)庫(kù)服務(wù)器均提供了substring()函數(shù)
2.10.9.2.5.2.?Oracle Database提供的是substr()函數(shù)
3.?算術(shù)函數(shù)
3.1.?acos(X)
3.1.1.?計(jì)算x的反余弦
3.2.?asin(x)
3.2.1.?計(jì)算x的反正弦
3.3.?atan(x)
3.3.1.?計(jì)草x的反正切
3.4.?cos(x)
3.4.1.?計(jì)軍x的余弦
3.5.?cot(x)
3.5.1.?計(jì)算x的余切
3.6.?exp(x)
3.6.1.?計(jì)算e
3.7.?ln(x)
3.7.1.?計(jì)算x的自然對(duì)數(shù)
3.8.?sin(x)
3.8.1.?計(jì)軍x的正弦
3.9.?sqrt(x)
3.9.1.?計(jì)軍x的平方根
3.10.?tan(x)
3.10.1.?計(jì)算x的正切
3.11.?mod()函數(shù)
3.11.1.?用于計(jì)算余數(shù)
3.11.2.?常用于整數(shù)參數(shù)
3.11.3.?MySQL中也可以使用實(shí)數(shù)
3.11.3.1.?mysql> SELECT MOD(22.75, 5);
3.11.4.?SQL Server未提供mod()函數(shù),可以使用運(yùn)算符%來(lái)代替
3.12.?pow()函數(shù)
3.12.1.?返回第一個(gè)參數(shù)的第二個(gè)參數(shù)次冪
3.12.2.?Oracle Database或SQL Server,則為power()函數(shù)
3.12.3.?pow(2,8)是MySQL中用于計(jì)算2^8的方式
3.12.4.?計(jì)算機(jī)內(nèi)存通常是以2x字節(jié)為單位分配的,所以pow()函數(shù)可以非常方便地確定某段內(nèi)存確切的字節(jié)數(shù)
3.12.4.1.?mysql
-> SELECT POW(2,10) kilobyte, POW(2,20) megabyte,
-> POW(2,30) gigabyte, POW(2,40) terabyte;
4.?數(shù)值精度
4.1.?在處理浮點(diǎn)數(shù)時(shí),可能并不總是需要使用或顯示數(shù)值的全精度
4.2.?ceil()
4.2.1.?SQL Server使用ceiling()替代ceil()
4.2.2.?向上取整
4.2.2.1.?哪怕小數(shù)部分非常小
4.3.?floor()
4.3.1.?向下取整
4.3.1.1.?哪怕小數(shù)部分非常大
4.4.?round()
4.4.1.?四舍五入
4.4.2.?使用負(fù)數(shù)作為第2個(gè)參數(shù),表示小數(shù)點(diǎn)左側(cè)的部分需要被截取或取整多少位
4.5.?truncate()
4.5.1.?Oracle Database使用trunc()替代truncate()
4.5.2.?將不需要的小數(shù)位直接丟棄
4.5.3.?SQL Server并未提供truncate()函數(shù),而round()函數(shù)的第3個(gè)可選參數(shù)如果存在且不為0,則表明要執(zhí)行截取操作,而非取整
4.5.4.?使用負(fù)數(shù)作為第2個(gè)參數(shù),表示小數(shù)點(diǎn)左側(cè)的部分需要被截取或取整多少位
5.?有符號(hào)數(shù)
5.1.?abs()函數(shù)
5.1.1.?絕對(duì)值
5.2.?sign()函數(shù)
5.2.1.?負(fù)數(shù),則返回?1
5.2.2.?0,則返回0
5.2.3.?正數(shù),則返回1
-> UPDATE string_tbl
-> SET text_fld = 'This string didn''t work, but it does now';
UPDATE string_tbl SET text_fld =
?'This string didn\'t work, but it does now'
-> SELECT quote(text_fld)
-> FROM string_tbl;
-> SELECT POW(2,10) kilobyte, POW(2,20) megabyte,
-> POW(2,30) gigabyte, POW(2,40) terabyte;
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-694782.html
到了這里,關(guān)于讀SQL學(xué)習(xí)指南(第3版)筆記11_字符串函數(shù)和數(shù)值函數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!