對應參數描述:
instr('源字符串' , '目標字符串' ,'開始位置','第幾次出現'),返回目標字符串在源字符串中的位置。后面兩個參數可要可不要。
instr('源字符串' , '目標字符串' ), 從開頭開始查找第一個‘ 目標字符串 ’出現的位置
1.結尾,網上有說這么寫的,但是在orcle下沒有問題,在mysql中是有問題的。
instr('源字符串' , '目標字符串' ,'開始位置','第幾次出現'),返回目標字符串在源字符串中的位置。后面兩個參數可要可不要。
instr('源字符串' , '目標字符串' ), 從開頭開始查找第一個‘ 目標字符串 ’出現的位置
1.結尾,網上有說這么寫的,但是在orcle下沒有問題,在mysql中是有問題的。
查詢最后一個
SELECT * FROM 用戶.表 WHERE INSTR(字段名, ‘傑 ’) = LENGTH(字段名)
SELECT * FROM 用戶.表 WHERE 字段名 LIKE '%傑 ‘;
查詢最后兩個
SELECT * FROM 用戶.表 WHERE INSTR(字段名, ‘邱天’) = LENGTH(字段名)-1
SELECT * FROM 用戶.表 WHERE 字段名 LIKE '%邱天‘;
上面兩個是相等的,不過第一個效率高 。
實際執行結果:
換個SQl執行:
按這個查詢在mysql里面是有問題的:
第一:LENGTH()函數在mysql中取字節,因此每個漢子字要按三個字節計算。
第二:instr取的是位置。
SELECT * FROM 用戶.表 WHERE INSTR(字段名, ‘傑’,-1,1) = LENGTH(字段名)
我覺得前半部分需要加上位置參數,才是表示從倒數第一個位置開始,第一次出現的位置,
加上后報錯如下:
incorrect parameter count in the call to native function 'instr'
這是由於mysql和Orcle的不同造成的。
實際執行結果:
SELECT *
FROM d_ebc_member
WHERE
INSTR(member_name,'傑') = (LENGTH(member_name));
換個SQl執行:
SELECT *
FROM d_ebc_member
WHERE
INSTR(member_name,'傑') = (LENGTH(member_name)-6);
按這個查詢在mysql里面是有問題的:
第一:LENGTH()函數在mysql中取字節,因此每個漢子字要按三個字節計算。
第二:instr取的是位置。
SELECT * FROM 用戶.表 WHERE INSTR(字段名, ‘傑’,-1,1) = LENGTH(字段名)
我覺得前半部分需要加上位置參數,才是表示從倒數第一個位置開始,第一次出現的位置,
加上后報錯如下:
incorrect parameter count in the call to native function 'instr'
這是由於mysql和Orcle的不同造成的。
結論:
末尾查詢使用使用like或者其他,用instr無法實現末尾查詢
2.包含
SELECT *
FROM d_ebc_member
WHERE
INSTR(member_name,'傑') > 0;
SELECT * FROM 用戶.表 WHERE 字段名 LIKE '%傑 %‘;
3.開頭
SELECT *
FROM d_ebc_member
WHERE
INSTR(member_name,'周') = 1;
SELECT * FROM 用戶.表 WHERE 字段名 LIKE ‘周 %’;
4.not like
4.not like
SELECT *
FROM d_ebc_member
WHERE
INSTR(member_name,'周') = 0;
SELECT * FROM 用戶.表 WHERE 字段名 not LIKE ‘%周%’;
SELECT * FROM 用戶.表 WHERE 字段名 not LIKE ‘%周%’;
SELECT *
FROM d_ebc_member
WHERE
member_name
NOT LIKE
'%周%'