A. sql Server 查詢如何匹配這種結構的數字ABBBBB、AABBCC
寫個自定義函數吧,判斷一下。用查詢句寫起來太長了,不合適 。
B. SQL的replace如何精確匹配數字
SELECT REPLACE(@Expression,'1+2','XXX+2')
這個函數沒有取巧的地方,是全文替換的,不支持正則匹配,只能找出唯一的地方進行替換
C. 求mysql用like檢索欄位中帶有數字的語句
您好,一、SQL模式:
SQL的模式匹配允許你使用「_」匹配任何單個字元,而「%」匹配任意數目字元(包括零個字元)。在 MySQL中,SQL的模式預設是忽略大小寫的。下面顯示一些例子。注意在你使用SQL模式時,你不能使用=或!=;而使用LIKE或NOT LIKE比較操作符。
SELECT 欄位 FROM 表 WHERE 某欄位 Like 條件
其中關於條件,SQL提供了四種匹配模式:
1,%:表示任意個或多個字元。可匹配任意類型和長度的字元。
比如 SELECT * FROM [user] WHERE u_name LIKE 『%三%'
將會把u_name為「張三」,「張貓三」、「三腳貓」,「唐三藏」等等有「三」的記錄全找出來。
另外,如果需要找出u_name中既有「三」又有「貓」的記錄,請使用and條件
SELECT * FROM [user] WHERE u_name LIKE 『%三%' AND u_name LIKE 『%貓%'
若使用 SELECT * FROM [user] WHERE u_name LIKE 『%三%貓%'
雖然能搜索出「三腳貓」,但不能搜索出符合條件的「張貓三」。
2,_:表示任意單個字元。匹配單個任意字元,它常用來限製表達式的字元長度語句:(可以代表一個中文字元)
比如 SELECT * FROM [user] WHERE u_name LIKE 『_三_'
只找出「唐三藏」這樣u_name為三個字且中間一個字是「三」的;
再比如 SELECT * FROM [user] WHERE u_name LIKE 『三__';
只找出「三腳貓」這樣name為三個字且第一個字是「三」的;
二、正則模式:
由MySQL提供的模式匹配的其他類型是使用擴展正則表達式。當你對這類模式進行匹配測試時,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它們是同義詞)。
擴展正則表達式的一些字元是:
「.」匹配任何單個的字元。(單位元組字元)
一個字元類「[...]」匹配在方括弧內的任何字元。例如,「[abc]」匹配「a」、「b」或「c」。為了命名字元的一個范圍,使用一個「-」。「[a-z]」匹配任何小寫字母,而「[0-9]」匹配任何數字。
「 * 」匹配零個或多個在它前面的東西。例如,「x*」匹配任何數量的「x」字元,「[0-9]*」匹配的任何數量的數字,而「.*」匹配任何數量的任何東西。
正則表達式是區分大小寫的,但是如果你希望,你能使用一個字元類匹配兩種寫法。例如,「[aA]」匹配小寫或大寫的「a」而「[a-zA-Z]」匹配兩種寫法的任何字母。
如果它出現在被測試值的任何地方,模式就匹配(只要他們匹配整個值,SQL模式匹配)。
為了定位一個模式以便它必須匹配被測試值的開始或結尾,在模式開始處使用「^」或在模式的結尾用「$」。
為了說明擴展正則表達式如何工作,上面所示的LIKE查詢在下面使用REGEXP重寫:
為了找出以「三」開頭的名字,使用「^」匹配名字的開始。
FROM [user] WHERE u_name REGEXP 『^三';
將會把u_name為 「三腳貓」等等以「三」開頭的記錄全找出來。
為了找出以「三」結尾的名字,使用「$」匹配名字的結尾。
FROM [user] WHERE u_name REGEXP 『三$';
將會把u_name為「張三」,「張貓三」等等以「三」結尾的記錄全找出來。
你也可以使用「{n}」「重復n次」操作符重寫先前的查詢:
FROM [user] WHERE u_name REGEXP 『b{2}$';
注意:如果是中文字元,可能在使用時需要注意一下。
D. SQL准確查一串數字的語法
SELECT * FROM table WHERE field NOT LIKE '%[0-9a-zA-Z]%' 在SQL中,有四種模糊查詢方式,即可以使用匹配方式。 %表示匹配任意 [xxx] 匹配 [ ] 之間的字元。 _ 匹配一個字元 [^ ] 表示不含 [ ] 內的字元。
E. winform通過OLEDB用sql匹配數字
MSAccess:IsNumericFunction
.
Description
umber.Otherwise,itreturnsFALSE.
Syntax
:
IsNumeric(expression)
ParametersorArguments
expressionisavariant.
AppliesTo
:
Access2013,Access2010,Access2007,Access2003,AccessXP,Access2000
Example
IsNumeric(786)wouldreturnTRUE
IsNumeric("TechontheNet")wouldreturnFALSE
IsNumeric("234")wouldreturnTRUE
用法:
select*fromtablewhereIsNumeric(col)
F. 如果要匹配整個數字,sql語句正則表達式怎麼寫:如東方線110開關,東方線110隔離開關,
如果你用的是 SQL Server , 可以使用 PATINDEX 函數處理。
CREATE TABLE #temp ( val varchar(30) );
GO
INSERT INTO #temp
SELECT '東方線110開關' UNION ALL
SELECT '東方線110隔離開關' UNION ALL
SELECT '東方線110我1開關' UNION ALL
SELECT '東方線1101開關';
GO
1> SELECT *
2> FROM #temp
3> WHERE
4> PATINDEX ('%[^0-9]110[^0-9]%', val ) > 0
5> GO
val
------------------------------
東方線110開關
東方線110隔離開關
東方線110我1開關
(3 行受影響)
G. sql 語句中count函數怎麼用
COUNT() 函數返回匹配指定條件的行數。
SQL COUNT(column_name) 語法
COUNT(column_name) 函數返回指定列的值的數目(NULL 不計入):
SELECT COUNT(column_name) FROM table_name;
SQL COUNT(*) 語法
COUNT(*) 函數返回表中的記錄數:
SELECT COUNT(*) FROM table_name;
SQL COUNT(DISTINCT column_name) 語法
COUNT(DISTINCT column_name) 函數返回指定列的不同值的數目:
SELECT COUNT(DISTINCT column_name) FROM table_name;
注釋:COUNT(DISTINCT) 適用於 ORACLE 和 Microsoft SQL Server,但是無法用於 Microsoft Access。
SQL COUNT(column_name) 實例
下面的 SQL 語句計算 "access_log" 表中 "site_id"=3 的總訪問量:
實例
SELECT COUNT(count) AS nums FROM access_log
WHERE site_id=3;
SQL COUNT(*) 實例
下面的 SQL 語句計算 "access_log" 表中總記錄數:
實例
SELECT COUNT(*) AS nums FROM access_log;
執行以上 SQL 輸出結果如下:
H. 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前面必須是個加括弧的子表達式.
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
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
查詢到匹配的字元串才返回匹配的字元.沒查到就返回空.
I. sql中count函數的使用
COUNT() 函數返回匹配指定條件的行數。
SQL COUNT(column_name) 語法
COUNT(column_name) 函數返回指定列的值的數目(NULL 不計入):
SELECT COUNT(column_name) FROM table_name;
SQL COUNT(*) 語法
COUNT(*) 函數返回表中的記錄數:
SELECT COUNT(*) FROM table_name;
SQL COUNT(DISTINCT column_name) 語法
COUNT(DISTINCT column_name) 函數返回指定列的不同值的數目:
SELECT COUNT(DISTINCT column_name) FROM table_name;
注釋:COUNT(DISTINCT) 適用於 ORACLE 和 Microsoft SQL Server,但是無法用於 Microsoft Access。
SQL COUNT(column_name) 實例
下面的 SQL 語句計算 "access_log" 表中 "site_id"=3 的總訪問量:
實例
SELECT COUNT(count) AS nums FROM access_log
WHERE site_id=3;
SQL COUNT(*) 實例
下面的 SQL 語句計算 "access_log" 表中總記錄數:
實例
SELECT COUNT(*) AS nums FROM access_log;
執行以上 SQL 輸出結果如下: