1、使用ASCIISTR函式判別
ASCIISTR函式說明:ASCIISTR返回字元的ASCII形式的字串。非ASCII的字元被轉化為\xxxx的形式。使用ASCIISTR函式也是根據非ASCII字元會被轉化這個特性來判別中文字元,只要裡面包含中文字元,則必定會有\xxx這樣的字元。
使用 ASCIISTR(NAME_ONE) LIKE "%\%" 就能判別那些有中文的記錄。如下所示:
SELECT NAME_ONE FROM TEST WHERE ASCIISTR(NAME_ONE) LIKE "%\%"
2、使用CONVERT函式判別
CONVERT函式說明:
CONVERT(inputstring,dest_charset,source_charset)
inputstring:要轉換的字串
dest_charset:目標字符集
source_charset:原字符集
3、使用函式length和lengthb來判別
使用函式length與lengthb來判別,是基於中文字元佔用2~4個位元組,而ASCII字元佔用一個位元組,那麼對比LENGTH與LENGTHB就會不一樣。這樣就能判別欄位中是否包含中文字元,但是跟ASCIISTR一樣,如果裡面的非ASCI字元包含非中文,它一樣不能判別。依然有取巧嫌疑。
SELECT NAME_ONE FROM TEST WHERE LENGTH(NAME_ONE) != LENGTHB(NAME_ONE);
擴充套件資料
Oracle SQL編寫注意事項:
1、SQL語句用大寫的;因為Oracle總是先解析SQL語句,把小寫的字母轉換成大寫的再執行。
2、資料表最好起別名;因為便於sql最佳化器快速分析。
3、儘量不要使用 insert into table value(?,?,?,?,?)格式,要指出具體要賦值的欄位。INSERT.....SELECT的效率會有提高。
4、select與from語句之間只定義返回的欄位名,除非返回所有的欄位,儘量不要使用 * 。
5、select欄位名應按照表的欄位物理順序編寫,欄位提取要按照“需多少、提多少”的原則,原因是大批次資料的抽取會影響sql快取的效率。
6、COUNT(*)也是要避免的,因為Count(*)會對全欄位做聚集。但一般的觀點相反, count(*) 比count(1)稍快 , 當然如果可以透過索引檢索,對索引列的計數仍舊是最快的. 例如 COUNT(EMPNO)。
7、條件中使用or 會引起全表掃描,比較影響查詢效率,儘可能少用或不用,實在不行可以用UNION代替。
1、使用ASCIISTR函式判別
ASCIISTR函式說明:ASCIISTR返回字元的ASCII形式的字串。非ASCII的字元被轉化為\xxxx的形式。使用ASCIISTR函式也是根據非ASCII字元會被轉化這個特性來判別中文字元,只要裡面包含中文字元,則必定會有\xxx這樣的字元。
使用 ASCIISTR(NAME_ONE) LIKE "%\%" 就能判別那些有中文的記錄。如下所示:
SELECT NAME_ONE FROM TEST WHERE ASCIISTR(NAME_ONE) LIKE "%\%"
2、使用CONVERT函式判別
CONVERT函式說明:
CONVERT(inputstring,dest_charset,source_charset)
inputstring:要轉換的字串
dest_charset:目標字符集
source_charset:原字符集
3、使用函式length和lengthb來判別
使用函式length與lengthb來判別,是基於中文字元佔用2~4個位元組,而ASCII字元佔用一個位元組,那麼對比LENGTH與LENGTHB就會不一樣。這樣就能判別欄位中是否包含中文字元,但是跟ASCIISTR一樣,如果裡面的非ASCI字元包含非中文,它一樣不能判別。依然有取巧嫌疑。
SELECT NAME_ONE FROM TEST WHERE LENGTH(NAME_ONE) != LENGTHB(NAME_ONE);
擴充套件資料
Oracle SQL編寫注意事項:
1、SQL語句用大寫的;因為Oracle總是先解析SQL語句,把小寫的字母轉換成大寫的再執行。
2、資料表最好起別名;因為便於sql最佳化器快速分析。
3、儘量不要使用 insert into table value(?,?,?,?,?)格式,要指出具體要賦值的欄位。INSERT.....SELECT的效率會有提高。
4、select與from語句之間只定義返回的欄位名,除非返回所有的欄位,儘量不要使用 * 。
5、select欄位名應按照表的欄位物理順序編寫,欄位提取要按照“需多少、提多少”的原則,原因是大批次資料的抽取會影響sql快取的效率。
6、COUNT(*)也是要避免的,因為Count(*)會對全欄位做聚集。但一般的觀點相反, count(*) 比count(1)稍快 , 當然如果可以透過索引檢索,對索引列的計數仍舊是最快的. 例如 COUNT(EMPNO)。
7、條件中使用or 會引起全表掃描,比較影響查詢效率,儘可能少用或不用,實在不行可以用UNION代替。