回覆列表
  • 1 # 使用者4901841896917

    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代替。

  • 中秋節和大豐收的關聯?
  • 屬虎的七月出生好嗎?