① c#中,如何用正則表達式匹配sql語句where之前的部分
foreach(Match m in new Regex(@"^(?:\s*)(.+)(?=(?i:where))").Matches("select * from OilTankerMeasureGrid where Proct='油品prodet' And MeasureTime between CONVERT(datetime,'2019/8/26 0:00:00',101) And CONVERT(datetime,'2019/8/29 0:00:00',101) And WaterHeight=90 "))
{
Console.WriteLine(m.Value);
}
② 正則表達式,從sql語句中匹配主鍵,外鍵,主鍵表名
1.不為空
create table emp_02
(
col number,
col1 varchar(20) not null,
col2 varchar(20) constraint emp_not_null not null
)
2.unique
create table emp_02
(
col number,
col1 varchar(20) unique,
col2 varchar(20),
constraint emp_unique unique(col2)
)
3 primary key
create table emp_03
(
col number primary key,
col1 varchar(20),
col2 varchar(20)
)
4 foreign key
create table emp_05
(
col number primary key,
colforeign number,
col1 varchar(20),
col2 varchar(20),
constraint fk_col foreign key(colforeign) references emp_04(col)
)
5 check
create table emp_10
(
col number,
col1 varchar(20),
col2 varchar(20),
constraint ch_col2 check (col2 in('男','女'))
)
6 添加約束
create table emp_06
(
col number,
col1 varchar(20) constraint fk_emp_06 primary key,
col2 varchar(20)
)
create table emp_07
(
col number,
col1 varchar(20),
col2 varchar(20)
)
alter table emp_07 add constraint AAAA foreign key(col1) references emp_06(col1)
7 刪除約束
alter table emp_07 drop constraint AAAA
ALTER TABLE emp_06 DROP PRIMARY KEY CASCADE
8 查詢約束
SELECT constraint_name, constraint_type,
search_condition
FROM user_constraints
WHERE table_name = 'EMP_03';
--5、商品推薦默認為0
alter table proct
add constraint DF_recommend default 0 for [pro_recommend]
③ mysql 正則表達式 查詢匹配 某個詞
\w是匹配[a-zA-Z0-9] . ? 匹配一個或者0個前面的字元,* 匹配前面0個或者多個字元。
所以這個正則表達式匹配前面具有數字或者字母開頭的,中間為word,後面為數字或者字母結尾的字元串。開頭和結尾不能同時出現字母和數字。
以下幾個例子可匹配:
④ sybase SQL中怎麼實現正則表達式匹配
CREATE FUNCTION dbo.find_regular_expression
(
@source varchar(5000), --需要匹配的源字元串
@regexp varchar(1000), --正則表達式
@ignorecase bit = 0 --是否區分大小寫,默認為false
)
RETURNS bit --返回結果0-false,1-true
AS
BEGIN
--0(成功)或非零數字(失敗),是由 OLE 自動化對象返回的 HRESULT 的整數值。
DECLARE @hr integer
--用於保存返回的對象令牌,以便之後對該對象進行操作
DECLARE @objRegExp integer DECLARE @objMatches integer
--保存結果
DECLARE @results bit
⑤ SQL的正則表達式
注意:正則表達式後面需用''括起來,因為正則表達式是針對「文本」的匹配。
正則表達式REGEXP可以理解為可支持更多規則/通配符的LIKE,可以對檢索內容進行更強的控制。LIKE本身只能和%及_這兩種通配符連接進行粗略的搜索,而REGEXP可以支持更多規則,比如.是和%一樣的可匹配任意一個字元的正則模式,[]可匹配一個范圍,如REGEXP '[1-5] ton'可以搜索出來1 ton、2 ton、3 ton、4 ton、5 ton。
一些正則模式:
. :匹配任意一個字元,類似於%
| :類似於OR
[] :字元集合,可用|隔開表or選項,也可用-定義范圍
[^] :類似於NOT,匹配非[]框內的
定位元字元 :
^ :匹配輸入字元串的開始位置【^有兩種用法,一種是開始位置,一種和[]連在一起表示NOT】
$ :匹配輸入字元串的結束位置
[[:<:]] :詞的開始
[[:<:]] :詞的結尾
字元類 (預定義的字元集,類似「快捷鍵」):
重復元字元 :
* :0次或多次匹配
+ :1次或多次匹配(等於{1,})
? :匹配它前面的任何字元0次或1次(等於{0,1})
{n} :指定數目的匹配
{n,} :不少於指定數目的匹配
{n,m} :匹配數目的范圍(m不超過255)
正則表達式略復雜,但用好了會非常方便,所以務必把各種正則模式記熟。
關於特殊字元所在位置會造成不同影響,有個小例子:
^[0-9\\.]表示查找以0-9里任意一個數字和「.」開頭的字元串
[^0-9\\.]表示除了「0-9.」這個單詞外的任意字元串
轉義
如果想搜出代表正則模式字元本身,比如想查找「.」,如果直接輸REGEXP '.',那麼查找出來的將是全部行,因為「.」表示任意字元;又比如想查找「|」,直接輸REGEXP '|',那麼查找不出結果,因為正則表達式認為這是or的含義,此時需要用到「轉義」的功能,即在想查找的特殊字元前輸入兩條斜杠——「//」,告訴正則表達式現在要查找的是特殊字元本身,而不是它所代表的含義。
另外還有一些在SQL練習中碰到的其他注意事項:
NOT只對單個欄位有效,如果想多重否定,需要在每個欄位前都加上NOT,比如 WHERE vend_id NOT IN(1002,1003) AND prod_price NOT IN (5.99);
通配符%可以任意長度的字元,包括0字元,但不能匹配出NULL;_只能匹配單個字元。注意盡量少使用通配符,並且盡量不要在開頭使用,避免搜索時間過長。