當前位置:首頁 » 編程語言 » sql匹配0到8開頭
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql匹配0到8開頭

發布時間: 2022-07-29 04:01:36

sql中,要求只能是8位字元,前兩位是0,3~4位為數字,第五位為下劃線,6~8位為字母,怎麼寫check約束條件!

可以這樣寫
alter table table1 add constraint chk_col check(
len(col1)= 8 and
left(col1,2) = '00' and
substring(col1,3,1) like '[1-9]' and
substring(col1,4,1) like '[1-9]' and
substring(col1,5,1) = '_' and
substring(col1,6,1) like '[A-Z]' and
substring(col1,7,1) like '[A-Z]' and
substring(col1,8,1) like '[A-Z]' );

❷ sql 正則表達式匹配

  • 當我們要進行一些簡單的糊塗查詢時用百分號(%),通配符(_)就可以了.其中%表達任意長度的字元串,_表示任意的某一個字元.

比如

select*fromempwhereenamelike's%'orenamelike's_';

但如果在一些復雜的查詢中關用這兩個符號sql語句就會非常復雜,而且也不一定能實現.從Oracle 10g開始引入了在其他程序語言中普通使用的正則表達式.

主要有regexp_like,regexp_replace,regexp_substr,regexp_instr四個正則表達式函數.

  • 正則表達式中的元字元:

元字元 意思 例子

說明要匹配的字元是一個特殊字元、常量或者後者引用。(後引用重復上一次的匹配)

匹配換行符
\ 匹配
匹配(匹配 )


^ 匹配字元串的開頭位置 ^a匹配arwen.但不匹配barwen.

$ 匹配字元串的末尾位置 en$匹配arwen.但不匹配arwenb.

* 匹配前面的字元0次或多次 a*rwen可以匹配rwen或aaarwen.

+ 匹配前面的字元1次或多次 a+rwen可以匹配arwen或aarwen.但不能匹配rwen.

? 匹配前面的字元0次或1次 a?rwen可以匹配arwen或rwen.但不能匹配aarwen.

{n} 匹配前面的字元恰好是n次,其中n是整數 ar{2}wen可以匹配arrwen.但不能匹配arwen或arrrwen.

{n,m} 匹配前面的字元至少是n次,最多是m次.如果寫成{n,} 表示最少匹配n次.沒有上限.

ar{1,2}wen可以匹配arwen,arrwen.但不匹配awen或arrrwen.


. 點號,匹配除null,換行以外的任意單個字元 arw.n.可以匹配arwen,arwin.但不能匹配arween或arwn.

(pattern) 括弧中pattern是一個子正則表達式,匹配指定pattern模式的一個子表達式。 其實括弧就像一般語言表達式中的括弧.有時多加些括弧可增強可讀性.另外的用處見下面關於 的描述.

x|y 匹配「或」 x|y可以匹配x或者y

[abc] 可以匹配abc中的任何單個字元 hello[abc]可以匹配helloa,hellob,helloc

[a-z] 可以匹配指定范圍內的任何單個字元 hell[a-z]可以匹配hello或者hellz

[::] 指定一個字元類,可以匹配該類中的任何字元 [:alphanum:]可以匹配字元0-9、A-Z、a-z
[:alpha:]可以匹配字元A-Z、a-z
[:blank:]可以匹配空格或tab鍵
[:digit:]可以匹配數字0-9
[:graph:]可以匹配非空字元
[:lower:]可以匹配小寫字母a-z
[:print:]與[:graph:]類似,不同之處在於[:print:]包括空格字元
[:punct:]可以匹配標點符號.,""等等
[:space:]可以匹配所有的空字元
[:upper:]可以匹配大寫字母A-Z
[:xdigit:]可以匹配十六進制數字0-9、A-F、a-f

這是對前一次匹配命中的一個後引用,其中n是一個正整數 arw(en)1可以匹配arwenen.注意1前面必須是個加括弧的子表達式.

  1. regexp_like:

regexp_like(x,pattern[,match_option]),查看x是否與pattern相匹配,該函數還可以提供一個可選的參數match_option字元串說明默認的匹配選項。match_option的取值如下:
『c』 說明在進行匹配時區分大小寫(預設值);
'i' 說明在進行匹配時不區分大小寫;
'n'(.)點號能表示所有單個字元,包括換行(俺還不知道什麼地方有用到換行.只知道sql裡面可以用chr(10)表示換行.
'm' 字元串存在換行的時候當作多行處理.這樣$就可匹配每行的結尾.不然的話$只匹配字元串最後的位置.

示例:select * from emp where regexp_like(ename,'^a[a-z]*n$');可以查找ename中以a開頭以n結尾的行.例如ename為arwen或arwin或anden.但Arwen不能被匹配.因為默認是區分大小寫.如果是select * from emp where regexp_like(ename,'^a[a-z]*n$','i')則可以查找ename為Arwen的行記錄.

2. regexp_instr:

REGEXP_INSTR(x,pattern[,start[,occurrence[,return_option[, match_option]]]])用於在x中查找pattern。返回pattern在x中出現的位置。匹配位置從1開始。可以參考字元串函數 INSTR(),參數相關:
'start' 開始查找的位置;
'occurrence' 說明應該返回第幾次出現pattern的位置;
'return_option' 說明應該返回什麼整數。若該參數為0,則說明要返回的整數是x中的一個字元的位置;若該參數為非0的整數,則說明要返回的整數為x中出現在pattern之後 的字元的位置;
'match_option' 修改默認的匹配設置.與regexp_like裡面的相同.

示例:

DECLARE

V_RESULTINTEGER;

BEGIN

SELECT REGEXP_INSTR('hello world','o',1,1,0)INTO V_RESULT

FROM DUAL;

DBMS_OUTPUT.PUT_LINE(V_RESULT);

END;

結果為5.即字母o第一個次出現的位置

如果regexp_instr('hello world','o',1,1,n)其中n為除0之外的整數.比如1,3.則結果為6.表示第一次出現字母o的後面一個字元的位置.

如果regexp_instr('hello world','o',1,2,0)則結果為9.表示第二次出現字母o的位置.

3. regexp_replace:

REGEXP_REPLACE(x,pattern[,replace_string[,start[,occurrence[, match_option]]]])用於在x中查找pattern,並將其替換為replae_string。可以參考字元串函數 REPLACE(),參數同REGEXP_INSTR函數

示例:

DECLARE

V_RESULT varchar2(90);

BEGIN

SELECT REGEXP_REPLACE('hello world','o','x',1,1)INTO V_RESULT

  1. FROM DUAL;

DBMS_OUTPUT.PUT_LINE(V_RESULT);

END;

結果為hellx world.

如果REGEXP_REPLACE('hello world','o','x'),則結果為hellx wxrld.

如果 REGEXP_REPLACE('hello w


orld','o','x',1,2)則結果為hello wxrld.

4.regexp_substr:

REGEXP_SUBSTR(x,pattern[,start[,occurrence[, match_option]]])用於在x中查找pattern並返回。可以參考字元串函數 SUBSTR(),參數同REGEXP_INSTR函數.

例如:

DECLARE

V_RESULT VARCHAR2(255);

BEGIN

SELECTREGEXP_SUBSTR('hello world','l{2}')INTO V_RESULT

FROM DUAL;

DBMS_OUTPUT.PUT_LINE(V_RESULT);

END;

結果為ll

查詢到匹配的字元串才返回匹配的字元.沒查到就返回空.

❸ sql在一個表中一個ID(數據類型:narchar)列,要求ID必須我8個字元,全面兩位必須為0

--這是一般的SQL寫法
ALTER TABLE 表 WITH NOCHECK
ADD CONSTRAINT ck_Name CHECK (欄位 like '00[0-9][0-9]\_[a-zA-Z][a-zA-Z][a-zA-Z]' escape '\')

--這是用正則表達式的寫法,dbo.IsMatch這個函數是自定義的,你用上面的寫法就可以了
ALTER TABLE dbo.T WITH NOCHECK
ADD CONSTRAINT ck_Name CHECK (dbo.IsMatch('^[0]{2}\d{2}_[a-zA-Z]{3}$',欄位)='True')

❹ 在SQL—Server中設置一個列的約束只能是八位字元,前兩位是0,3-4為數字,第五位是下劃線,6-8位是字母。

substring('12345678',1,2)='00'--判斷前兩位是0
Ascii(substring('12A45678',3,1)) between Ascii('0') and Ascii('9') --判斷第三位是數字
Ascii(substring('12A45678',4,1)) between Ascii('0') and Ascii('9') --判斷第四位是數字
Ascii(substring('12345678',5,1)) = Ascii('_') --判斷第五位是下劃線
Ascii(Upper(substring('12345678',6,1))) between Ascii('A') and Ascii('Z') --判斷第六位是字母
Ascii(Upper(substring('12345678',7,1))) between Ascii('A') and Ascii('Z')--判斷第七位是字母
Ascii(Upper(substring('12345678',8,1))) between Ascii('A') and Ascii('Z')--判斷第八位是字母

❺ SQL語句:select查詢值必須不以」8」開頭,但必須包含字元」8」;

下面是某個資料庫中的ID號不以8開頭但是中間必須包括8的查詢語句。
select *
from 制單人信息表
where ID號 like '[^8]%8%'
切勿復制中文狀態下輸入的『』,在查詢分析器中會顯示錯誤!最好自己寫。

❻ SQL 如何設置時間為0點到8點 設置為上一天時間 其餘時間段 保存真實值

可以用case when 語句。

ORACLE寫法如下(假設時間欄位為dt):

SELECTCASEWHENdt-TRUNC(dt)between0and8/24thenTRUNC(dt)-1/24
ELSEdt
END
FROMTABLE

INSERT與UPDATE寫法類似。

❼ sql語句怎麼匹配多個字元且字元在一定范圍內

只能用OR連了,例如
select * from ship_ where ship_id like '[0-9]' or ship_id=14

❽ sql查詢欄位中第一位數為0到9的記錄或者第二為為0到9的記錄

select * from a where a like '[0-9]' or a like '_[0-9]'

❾ sql語句中通配符有幾種

SQL語句中通配符有四種,分別是百分號%、下劃線_、方括弧[
]、方括弧[!](或[^])。
在搜索資料庫中的數據時,SQL
通配符可以替代一個或多個字元。SQL
通配符必須與
LIKE
運算符一起使用。
1、百分號%:可匹配任意類型和長度的字元,如果是中文,請使用兩個百分號即%%。
2、下劃線_:匹配單個任意字元,它常用來限製表達式的字元長度。
3、方括弧[
]:指定一個字元、字元串或范圍,要求所匹配對象為它們中的任一個。
方括弧[^]或者[!]:其取值也[
]相同,但它要求所匹配對象為指定字元以外的任一個字元。
(9)sql匹配0到8開頭擴展閱讀:
SQL通配符是使用用特殊字元或語法拼寫,用來執行模糊搜索指令的語句功能。在搜索資料庫中的數據時,SQL
通配符可以替代一個或多個字元。
SQL
通配符必須與
LIKE
運算符一起使用。如在數據中搜索以大寫「A」字母開頭的字元類型數據,可以使用like
"A%"。
下劃線和百分號在sql模糊查詢like語句中為特殊字元,分別可匹配1個字元和0到多個字元,如果需要真正查詢特殊字元得轉義,如like
'a\_b%'
escape
'\',將匹配前3個字元為a_b的所有記錄。
參考資料來源:搜狗網路-SQL通配符