您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Mysql查詢?nèi)タ崭竦姆椒ㄓ心男?,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Mysql查詢?nèi)タ崭竦姆椒ㄓ心男卑?
最近系統(tǒng)線上數(shù)據(jù)庫數(shù)據(jù)出現(xiàn)一個問題,發(fā)現(xiàn)某些字段存在一些異常的首尾空格,不管是使用trim對比還是like查詢都查詢不到具體的數(shù)據(jù);在網(wǎng)上找了一些方法,最后發(fā)現(xiàn)一個去“不間斷空格”的方法解決了問題,在這里做一下記錄和匯總。
語法:trim(字段) || trim([{BOTH | LEADING | TRAILING} [指定字符] FROM] 字段)
列子:去除商品零件號左右空格,以及指定字符,打印去除字符后的長度
select p.parts_num as "零件號(包含首尾各3個空格)", length(p.parts_num) as "原始長度", trim(p.parts_num), length(trim(p.parts_num)) as "去除左右空格后長度", trim(leading ' 7' from p.parts_num), length(trim(leading ' 7' from p.parts_num)) as "去除左邊字符后長度", trim(trailing '7 ' from p.parts_num), length(trim(trailing '7 ' from p.parts_num)) as "去除右邊字符后長度" from product p where p.product_id = "1941573845271945216";
結(jié)果:
select p.parts_num as "零件號(包含首尾各3個空格)", length(p.parts_num) as "原始長度", ltrim(p.parts_num), length(ltrim(p.parts_num)) as "去除左空格后長度" from product p where p.product_id = "1941573845271945216";
結(jié)果:
select p.parts_num as "零件號(包含首尾各3個空格)", length(p.parts_num) as "原始長度", rtrim(p.parts_num), length(rtrim(p.parts_num)) as "去除右空格后長度" from product p where p.product_id = "1941573845271945216";
結(jié)果:
select p.parts_num as "零件號(包含首尾各3個空格)", length(p.parts_num) as "原始長度", replace(p.parts_num, ' ', ''), length(replace(p.parts_num, ' ', '')) as "替換空格后長度", replace(p.parts_num, '7', '8') as "把7替換成8" from product p where p.product_id = "1941573845271945216";
結(jié)果:
REPLACE(REPLACE(REPLACE(p.parts_num, CHAR(9), ''), CHAR(10), ''), CHAR(13), '')
(1)使用convert()先轉(zhuǎn)換一些特殊編碼的空格(unicode碼位u+00a0的utf-8編碼,也稱為不間斷空格)轉(zhuǎn)換成常規(guī)空格(ASCII 中編碼為0x20)
-- convert轉(zhuǎn)換,trim去除 select TRIM(convert(0xC2A0 using utf8mb4) FROM p.parts_num); -- 替換掉字符中的不間斷空格 select TRIM(REPLACE(p.parts_num, convert(0xC2A0 using utf8mb4), ' '));
這些特殊空格一般常見于各文本編輯器(word、Excel等,剛好出現(xiàn)問題的業(yè)務(wù)存在Excel導(dǎo)入數(shù)據(jù)的場景),想要詳細了解看下面推薦的文章。
歷史最悠久的空格,在1967年,ASCII 規(guī)范中被定義。
空格在 ASCII 中編碼為0x20, 占位符為一個半角字符。在日常英文書寫和代碼編寫中使用。
中文輸入中的空格(標準說法為中日韓表意字符(CJK)中使用的寬空格)。和其他漢字一樣,作為GBK的一個字符,其對應(yīng)的unicode碼為\u3000.寬
度是2個半角空格的大小。
例如:
先生 孫先生
unicode 為 \u00A0, 在代碼中可能會出現(xiàn)的編碼錯誤(utf8 編碼0xC2 0xA0) 就是它了。
在Word中,會遇到一個有多個單詞組成的詞組被分割在兩行文字中,這樣很容易讓人看不明白。這時候,不間斷空格就可以上場了。
輸入不間斷空格,會將不間斷空格連著的單詞在一行展示。
舉個例子:
零寬度空格 unicode 編碼為 \u200B.
不可見非打印字符。有了半角空格,也有了全角空格,其實還有零寬度空格。因為寬度為零,因此該字符是一個不可見字符。
這個編碼雖然是不可見的,但是也是非常有用的。它可以替換html中的標簽(軟換行, html5 新增)。
零寬度非中斷空格(ZWNBSP) unicode 編碼為 \u2060 (之前使用\ufeff表示,unicode 3.2 開始 \ufeff 標記unicode文檔的字節(jié)序。)
該空格結(jié)合了 non-breaking space 和 零寬度空格的特點。既會自動換行,寬度又是0。
零寬度空格(軟換行)舉例:
一行連續(xù)的英文編碼:
<p >phpIsTheBestProgramingLanguageInTheWorld</p>
而如果在每個可以換行的地方加上 <wbr />, 則可以在標記的最近的地方換行。
<p >php<wbr />Is<wbr />The<wbr />Best<wbr />Programing<wbr />Language<wbr />In<wbr />The<wbr />World</p>
雖然已經(jīng)有半角空格、全角空格,但是上面的空格如果字體變化了,不會隨著字體的變化而變化。
因此,又有了可以隨著字體的變化而變化的空格,簡單羅列如下:
在html 的寬度度量中,有一種單位叫em,是按照字體大小定義的,下面的em也是字體的寬度。
打印字符的空格有很多種,羅列幾個:
名稱 | unicode 編碼 | html 標記 | 特征和用途 |
---|---|---|---|
短空格 | \u2002 |   | html 中占位半個字 |
長空格 | \u2003 |   | html 中占位一個字 |
1/3em空格 | \u2004 |   | 占用1/3個空格 |
1/4em空格 | \u2005 |   | 占用1/4個空格 |
1/6em空格 | \u2006 |   | 占用1/6個空格 |
數(shù)樣間距 (figure space) | \u2007 |   | 在等寬字體中,寬度是一個字符的寬度。 |
行首前導(dǎo)空格 (punctuation space) | \u2008 |   | 寬度約為 0x20 的寬度。 |
瘦弱空格 (thin space) | \u2009 |   | 寬度是 全角打印空格的 1/5 或者 1/6 (寬度不定,法文設(shè)置為1/8), 主要用在打印兩個空的引號之間。 |
hair space | \u200a |   | (瀏覽器目前不支持), 最窄的空格,推薦標準為 (1/10, 1/16) |
narrow no-break space | \u202f | &nnbsp; | 和0a 類似,不同語種中不太一樣。 |
medium mathematical space | \u205f | &mediumspace; | 在格式化數(shù)學(xué)公式時使用。是 4/18 的 em寬度,例如:"a + b"中,a 和+ 之間應(yīng)該用 這個空格 |
到此,相信大家對“Mysql查詢?nèi)タ崭竦姆椒ㄓ心男庇辛烁畹牧私?,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。