加一個and length(字段)xx,(按照你的說法這個應(yīng)該是字符型的吧,如果是數(shù)字型的,那么再to_char一下)
秀嶼網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項目制作,到程序開發(fā),運營維護(hù)。創(chuàng)新互聯(lián)建站自2013年創(chuàng)立以來到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。
如果是數(shù)字型的字符,也可以用類似字段100這樣來控制長度的,100就是兩位數(shù)1000就是三位數(shù),以此類推。
在建表的時候,身份證字段定義成 varchar2(18)
再加一個約束:constraint ch1 check(length(字段名)=18)
PS:不是有15位的身份證號碼嗎?你怎么處理
方法/步驟
1
ASCII(x1)
【功能】:返回字符表達(dá)式最左端字符的ASCII 碼值。
【參數(shù)】:x1,字符表達(dá)式
【返回】:數(shù)值型
【示例】 select ascii('A') A,ascii('a') a,ascii(' ') space,ascii('示') hz from dual;
【說明】在ASCII()函數(shù)中,純數(shù)字的字符串可不用‘’括起來,但含其它字符的字符串必須用‘’括起來使用,否則會出錯。 如果最左端是漢字,只取漢字最左半邊字符的ASCII 碼
【互反函數(shù)】:chr()
2
CHR(n1)
【功能】:將ASCII 碼轉(zhuǎn)換為字符。
【參數(shù)】:n1,為0 ~ 255,整數(shù)
【返回】:字符型
【示例】 select chr(54740) zhao,chr(65) chr65 from dual;
【互反函數(shù)】:ASCII
3
CONCAT(c1,c2)
【功能】連接兩個字符串
【參數(shù)】c1,c2 字符型表達(dá)式
【返回】字符型 同:c1||c2
【示例】 select concat('010-','88888888')||'轉(zhuǎn)23' 高乾競電話 from dual;
4
INITCAP(c1)
【功能】返回字符串并將字符串的第一個字母變?yōu)榇髮?,其它字母小?
【參數(shù)】c1字符型表達(dá)式
【返回】字符型
【示例】 select initcap('smith abc aBC') upp from dual;
5
LOWER(c1)
【功能】:將字符串全部轉(zhuǎn)為小寫
【參數(shù)】:c1,字符表達(dá)式
【返回】:字符型
【示例】 select lower('AaBbCcDd')AaBbCcDd from dual;
【同類】UPPER()將字符串全部轉(zhuǎn)為大寫。
6
UPPER(c1)
【功能】將字符串全部轉(zhuǎn)為大寫
【參數(shù)】c1,字符表達(dá)式
【返回】字符型
【示例】 select upper('AaBbCcDd') upper from dual;
【同類】LOWER()將字符串全部轉(zhuǎn)為小寫
7
NLS_INITCAP(x[,y])
【功能】返回字符串并將字符串的第一個字母變?yōu)榇髮?,其它字母小?
【參數(shù)】x字符型表達(dá)式
【參數(shù)】Nls_param可選, 查詢數(shù)據(jù)級的NLS設(shè)置:select * from nls_database_parameters;
例如: 指定排序的方式(nls_sort=) 。
nls_sort=SCHINESE_RADICAL_M(部首、筆畫) nls_sort=SCHINESE_STROKE_M(筆畫、部首SCHINESE_PINYIN_M(拼音))
【返回】字符型
【示例】 select nls_initcap('ab cde') "test", nls_initcap('a c b d e','nls_sort= SCHINESE_PINYIN_M') "test1" from dual;
返回:Ab Cde, A C B D E
select nls_initcap('ab cde') "test", nls_initcap('a c b d e','NLS_LANGUAGE=AMERICAN') "test1" from dual;
直接定義字符串的最大長度就可以了,自后超過此長度的話,之后就無法插入,返回size有問題。
可以通過alter更改字符串長度:
sql: alter tablename modify columnName varchar2(25);
解釋:以上語句重置表中字段的屬性,設(shè)置最大長度是25個字節(jié),超過的話,無法正常插入。
用正則表達(dá)式,不過必須是10g及以上版本。因為以前版本不支持正則表達(dá)式。
在國內(nèi)外大中型數(shù)據(jù)庫管理系統(tǒng)中 把ORACLE作為數(shù)據(jù)庫管理平臺的用戶比較多 ORACLE 不論是數(shù)據(jù)庫管理能力還是安全性都是無可非議的 但是 它在漢字信息的顯示方面著實給中國用戶帶來不少麻煩 筆者多年從事ORACLE數(shù)據(jù)庫管理 經(jīng)常收到周圍用戶和外地用戶反映有關(guān)ORACLE數(shù)據(jù)庫漢字顯示問題的求援信 主要現(xiàn)象是把漢字顯示為不可識別的亂碼 造成原來大量信息無法使用 本文將就這一問題產(chǎn)生的原因和解決辦法進(jìn)行一些探討 供存在這方面問題的用戶朋友參考 原因分析 通過對用戶反映情況的分析 發(fā)現(xiàn)字符集的設(shè)置不當(dāng)是影響ORACLE數(shù)據(jù)庫漢字顯示的關(guān)鍵問題 那么字符集是怎么一會事呢?字符集是ORACLE 為適應(yīng)不同語言文字顯示而設(shè)定的 用于漢字顯示的字符集主要有ZHS CGB US ASCII WE ISO P 等 字符集不僅需在服務(wù)器端存在 而且客戶端也必須有字符集注冊 服務(wù)器端 字符集是在安裝ORACLE時指定的 字符集登記信息存儲在ORACLE數(shù)據(jù)庫字典的V$NLS_PARAMETERS表中 客戶端 字符集分兩種情況 一種情況是sql*net 以下版本 字符集是在windows的系統(tǒng)目錄下的oracle ini文件中登記的 另一種情況是sql*net 以上(即 位)版本 字符集是在windows的系統(tǒng)注冊表中登記的 要在客戶端正確顯示ORACLE 數(shù)據(jù)庫漢字信息 首先必須使服務(wù)器端的字符集與客戶端的字符集一致 其次是加載到ORACLE數(shù)據(jù)庫的數(shù)據(jù)字符集必須與服務(wù)器指定字符集一致 因此 把用戶存在的問題歸納分類 產(chǎn)生漢字顯示異常的原因大致有以下幾種 服務(wù)器指定字符集與客戶字符集不同 而與加載數(shù)據(jù)字符集一致 這種情況是最常見的 只要把客戶端的字符集設(shè)置正確即可 解決辦法見 服務(wù)器指定字符集與客戶字符集相同 與加載數(shù)據(jù)字符集不一致 這類問題一般發(fā)生在ORACLE版本升級或重新安裝系統(tǒng)時選擇了與原來服務(wù)器端不同的字符集 而恢復(fù)加載的備份數(shù)據(jù)仍是按原字符集卸出的場合 以及加載從其它使用不同字符集的ORACLE數(shù)據(jù)庫卸出的數(shù)據(jù)的情況 這兩種情況中 不管服務(wù)器端和客戶端字符集是否一致都無法顯示漢字 解決辦法見 服務(wù)器指定字符集與客戶字符集不同 與輸入數(shù)據(jù)字符集不一致 這種情況是在客戶端與服務(wù)器端字符集不一致時 從客戶端輸入了漢字信息 輸入的這些信息即便是把客戶端字符集更改正確 也無法顯示漢字 解決辦法見 .解決辦法 下面將分別對上述三種情況給出解決辦法 為了敘述方便 假設(shè)客戶端使用WINDOWS / 環(huán)境 并已成功地配置了TCP/IP協(xié)議 安裝了ORACLE的sql*net sql*pluse產(chǎn)品 設(shè)置客戶端字符集與服務(wù)器端字符集一致假設(shè)當(dāng)前服務(wù)器端使用US ASCII字符集 ( )查看服務(wù)器端字符集 通過客戶端或服務(wù)器端的sql*plus登錄ORACLE的一個合法用戶 執(zhí)行下列SQL語句 SQL select * from V$NLS_PARAMETERSparameter valueNLS_LANGUAGE AMERICANNLS_TERRITORY AMERICA… … NLS_CHARACTERSET US ASCIINLS_SORT BINARYNLS_NCHAR_CHARACTERSET US ASCII從上述列表信息中可看出服務(wù)器端ORACLE數(shù)據(jù)庫的字符集為 US ASCII ( )按照服務(wù)器端字符集對客戶端進(jìn)行配置 配置方法有兩種 安裝ORACLE的客戶端軟件時指定在安裝ORACLE的客戶端產(chǎn)品軟件時 選擇與ORACLE服務(wù)端一致的字符集(本例為US ASCII)即可 修改注冊信息的方法 根據(jù)ORACLE 客戶端所選sql*net 的版本分為下列兩種情況 a 客戶端為 sql*net 以下版本進(jìn)入Windows的系統(tǒng)目錄 編輯oracle ini文件 用US ASCII替換原字符集 重新啟動計算機(jī) 設(shè)置生效 b 客戶端為 sql*net 以上版本在WIN 下 運 行REGEDIT 第一步選HKEY_LOCAL_MACHINE 第二步選擇SOFARE 第三步選擇 ORACLE 第四步選擇 NLS_LANG 鍵 入 與服 務(wù) 器端 相 同 的 字 符 集(本例為 AMERICAN_AMERICAN US ASCII) 強(qiáng)制加載數(shù)據(jù)字符集與服務(wù)器端字符集一致假設(shè)要加載數(shù)據(jù)從原ORACLE數(shù)據(jù)庫卸出時的字符集為US ASCII 當(dāng)前ORACLE服務(wù)器字符集為WE ISO P 下面提供三種解決方法 ( ) 服務(wù)器端重新安裝ORACLE 在重新安裝ORACLE 時選擇與原卸出數(shù)據(jù)一致的字符集(本例為US ASCII) 加載原卸出的數(shù)據(jù) 這種情況僅僅使用于空庫和具有同一種字符集的數(shù)據(jù) ( )強(qiáng)行修改服務(wù)器端ORACLE當(dāng)前字符集 在用imp命令加載數(shù)據(jù)前 先在客戶端用sql*plus登錄system DBA用戶 執(zhí)行下列SQL語句進(jìn)行當(dāng)前ORACLE數(shù)據(jù)庫字符集修改 SQL create database character set US ASCII* create database character set US ASCIIERROR at line :ORA : insufficient privileges你會發(fā)現(xiàn)語句執(zhí)行過程中 出現(xiàn)上述錯誤提示信息 此時不用理會 實際上ORACLE數(shù)據(jù)庫的字符集已被強(qiáng)行修改為US ASCII 接著用imp命令裝載數(shù)據(jù) 等數(shù)據(jù)裝載完成以后 shutdown 數(shù)據(jù)庫 再startup 數(shù)據(jù)庫 用合法用戶登錄ORACLE數(shù)據(jù)庫 在sql命令提示符下 運行select * from V$NLS_PARAMETERS 可以看到ORACLE數(shù)據(jù)庫字符集已復(fù)原 這時再查看有漢字字符數(shù)據(jù)的表時 漢字已能被正確顯示 ( )利用數(shù)據(jù)格式轉(zhuǎn)儲 避開字符集限制 這種方法主要用于加載外來ORACLE數(shù)據(jù)庫的不同字符集數(shù)據(jù) 其方法如下 先將數(shù)據(jù)加載到具有相同字符集的服務(wù)器上 然后用轉(zhuǎn)換工具卸出為foxbase 格式或access格式數(shù)據(jù)庫 再用轉(zhuǎn)換工具轉(zhuǎn)入到不同字符集的ORACLE數(shù)據(jù)庫中 這樣就避免了ORACLE字符集的困擾 目前數(shù)據(jù)庫格式轉(zhuǎn)換的工具很多 象power builder 以上版本提供的pipeline Microsoft Access數(shù)據(jù)庫提供的數(shù)據(jù)導(dǎo)入/導(dǎo)出功能等 轉(zhuǎn)換方法參見有關(guān)資料說明 匹配字符集替換漢字對于 提到的情況 沒有很好的辦法 只能先把客戶端與服務(wù)器端字符集匹配一致后 根據(jù)原輸入漢字的特征碼替換漢字字符部分 lishixinzhi/Article/program/Oracle/201311/17682