精华内容
下载资源
问答
  • 在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置。只检索一次,就是说从字符的开始到字符的结尾就结束
  • oracle 截取字符(substr),检索字符位置(instr) case when then else end语句使用 收藏 常用函数:substr和instr 1.SUBSTR(string,start_position,[length]) 求子字符串,返回字符串 解释:string 元字符串 start_...
  • 好在我们还有另外一个办法,那就是使用instrinstr的用法如下: select * from students where instr(address, 'beijing') > 0 另外,还有个笨办法,那就是使用like,说到这里大家应该知道怎么做了吧: sel
  • sql数据库不能直接用instr函数
  • 在mysql中使用内部函数instr,可代替传统的like方式查询,并且速度更快。 instr 函数,第一个参数是字段,第二个参数是要查询的串,返回串的位置,第一个是1,如果没找到就是0. 例如,查询字段name中带”军”的...
  • 在MySQL中一般进行模糊搜索都是使用LIKE配合通配符进行查询的,在性能上一定的影响,下面给大家分享MYSQL自带的内置模糊搜索函数,除最后一个外其它三个性能上要比Like快些
  • instr(title,'手册')>0 相当于 title like '%手册%' instr(title,'手册')=1 相当于 title like '手册%' instr(title,'手册')=0 相当于 title not like '%手册%' t表中将近有1100万数据,很多时候,我们要进行字符串...
  • instR:仪器-源码

    2021-03-12 20:47:01
    instR:仪器
  • NULL 博文链接:https://tangkuo.iteye.com/blog/2257112
  • 本手册介绍 SINAMICS V90 伺服系统的相关信息,可供设计人员、操作员、机械工程 师、电气工程师、调试工程师和服务工程师使用。
  • 主要介绍了Oracle中instr和substr存储过程详解,需要的朋友可以参考下
  • Oracle的substr函数简单用法 substr(字符串,截取开始位置,截取长度) //返回截取的字 substr(‘Hello World’,0,1) //返回结果为 ‘H’ *从字符串第一个字符开始截取长度为1的字符串 substr(‘Hello World’,1,1) ...
  • 在MySQL 中,REGEXP_INSTR()函数返回与正则表达式模式匹配的子字符串的起始索引。索引从1 开始。如果不匹配,则返回 0。语法语法如下:REGEXP_INSTR(expr, pat[, pos[, occurrence[, return_option[, match_type]]]]...

    在 MySQL 中, REGEXP_INSTR() 函数返回与正则表达式模式匹配的子字符串的起始索引。

    索引从 1 开始。如果不匹配,则返回 0。

    语法

    语法如下:

    REGEXP_INSTR(expr, pat[, pos[, occurrence[, return_option[, match_type]]]])

    expr 为源字符串,pat 为正则表达式。

    pos 为可选参数,标识开始匹配的位置,默认为1。

    occurrence 为可选参数,标识匹配的次数,默认为 1。

    return_option 为可选参数,指定返回值的类型。如果为 0,则返回匹配的第一个字符的位置。如果为 1,则返回匹配的最后一个位置,默认为 0。

    match_type 为可选参数,允许优化正则表达式。例如,可以使用此参数指定是否区分大小写。

    示例 1 – 基本用法

    基本示例:

    SELECT REGEXP_INSTR('Cat', 'at') Result;

    结果:

    +--------+

    | Result |

    +--------+

    | 2 |

    +--------+

    子字符串从位置 2 开始存在匹配项。

    示例 2 – 不匹配

    不匹配的示例:

    SELECT REGEXP_INSTR('Cat', '^at') Result;

    结果:

    +--------+

    | Result |

    +--------+

    | 0 |

    +--------+

    没有匹配项,因为指定字符串必须从子字符串开始,结果返回 0。

    让我们把它改为 该子字符串开头 :

    SELECT REGEXP_INSTR('at', '^at') Result;

    结果:

    +--------+

    | Result |

    +--------+

    | 1 |

    +--------+

    示例 3 – 参数 pos

    指定开始位置:

    SELECT REGEXP_INSTR('Cat Cat', 'Cat', 2) Result;

    结果:

    +--------+

    | Result |

    +--------+

    | 5 |

    +--------+

    我们得到了第二次出现的索引。

    请注意,无论在哪里指定起始位置,索引都将从位置 1 开始计数。

    以下示例更加清楚地说明了这一点:

    SELECT

    REGEXP_INSTR('Cat Cat', 'Cat', 2) AS 'Pos 2',

    REGEXP_INSTR('Cat Cat', 'Cat', 3) AS 'Pos 3',

    REGEXP_INSTR('Cat Cat', 'Cat', 5) AS 'Pos 5';

    结果:

    +-------+-------+-------+

    | Pos 2 | Pos 3 | Pos 5 |

    +-------+-------+-------+

    | 5 | 5 | 5 |

    +-------+-------+-------+

    当然,根据您的正则表达式模式,可以返回完全不同的子字符串的索引。例:

    SELECT

    REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1) 'Pos 1',

    REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 2) 'Pos 2',

    REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 6) 'Pos 6';

    结果:

    +-------+-------+-------+

    | Pos 1 | Pos 2 | Pos 6 |

    +-------+-------+-------+

    | 1 | 5 | 16 |

    +-------+-------+-------+

    我们可以使用 REGEXP_SUBSTR() 函数检查子字符串:

    SELECT

    REGEXP_SUBSTR('Cat City is SO Cute!', 'C.t', 1) 'Pos 1',

    REGEXP_SUBSTR('Cat City is SO Cute!', 'C.t', 2) 'Pos 2',

    REGEXP_SUBSTR('Cat City is SO Cute!', 'C.t', 6) 'Pos 6';

    结果:

    +-------+-------+-------+

    | Pos 1 | Pos 2 | Pos 6 |

    +-------+-------+-------+

    | Cat | Cit | Cut |

    +-------+-------+-------+

    示例 4 – 参数 occurrence

    这是使用参数 occurrence 的示例。在所有情况下,我们都从位置 1开始:

    SELECT

    REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 1) 'Occurrence 1',

    REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 2) 'Occurrence 2',

    REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 3) 'Occurrence 3';

    结果:

    +--------------+--------------+--------------+

    | Occurrence 1 | Occurrence 2 | Occurrence 3 |

    +--------------+--------------+--------------+

    | 1 | 5 | 16 |

    +--------------+--------------+--------------+

    但是,如果我们从不同位置开始,结果将会有所不同:

    SELECT

    REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 2, 1) 'Occurrence 1',

    REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 2, 2) 'Occurrence 2',

    REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 2, 3) 'Occurrence 3';

    结果:

    +--------------+--------------+--------------+

    | Occurrence 1 | Occurrence 2 | Occurrence 3 |

    +--------------+--------------+--------------+

    | 5 | 16 | 0 |

    +--------------+--------------+--------------+

    发生这种情况是因为我们的起始位置是在第一次出现之后开始的。因此,2 次匹配变成 1 次匹配的结果,3 次匹配变成 2 次匹配的结果。并且由于不存在更多的次数,因此 3 次匹配的结果为零(即没有达到 3 次匹配)。

    示例 5 – 参数 return_option

    以下是使用参数 return_option 的示例:

    SELECT

    REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 1, 0) 'Option 0',

    REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 1, 1) 'Option 1';

    结果:

    +----------+----------+

    | Option 0 | Option 1 |

    +----------+----------+

    | 1 | 4 |

    +----------+----------+

    Option 0 返回了匹配的第一个字符的位置。Option 1 返回了匹配之后的位置。

    如果将其应用于上一个示例,如下:

    SELECT

    REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 1, 0) 'Occurrence 1',

    REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 2, 0) 'Occurrence 2',

    REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 3, 0) 'Occurrence 3'

    UNION ALL

    SELECT

    REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 1, 1),

    REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 2, 1),

    REGEXP_INSTR('Cat City is SO Cute!', 'C.t', 1, 3, 1);

    结果:

    +--------------+--------------+--------------+

    | Occurrence 1 | Occurrence 2 | Occurrence 3 |

    +--------------+--------------+--------------+

    | 1 | 5 | 16 |

    | 4 | 8 | 19 |

    +--------------+--------------+--------------+

    在这种情况下,我们使用 Option 0 设置了一组,使用 Option 1 设置了一组,然后使用 UNION ALL 将它们连接在一起。

    示例 6 – 参数 match_type

    您可以使用其他参数来确定匹配类型。可以指定诸如匹配是否区分大小写,是否包括行终止符之类的内容。

    这是指定区分大小写的匹配和不区分大小写的匹配的示例:

    SELECT

    REGEXP_INSTR('Cat City is SO Cute!', 'c.t', 1, 1, 0, 'c') 'Case-Sensitive',

    REGEXP_INSTR('Cat City is SO Cute!', 'c.t', 1, 1, 0, 'i') 'Case-Insensitive';

    结果:

    +----------------+------------------+

    | Case-Sensitive | Case-Insensitive |

    +----------------+------------------+

    | 0 | 1 |

    +----------------+------------------+

    参数 match_type 可以包含以下字符:

    c

    匹配区分大小写。

    i

    匹配不区分大小写。

    m

    多行模式。识别字符串中的行终止符。默认是仅在字符串表达式的开头和结尾匹配行终止符。

    n

    与 . 行终止符匹配。

    u

    仅匹配 Unix 的行结尾。只有换行符被识别为以 ., ^ 和 $ 结尾的行。

    展开全文
  • 在Oracle中可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符。其语法为:instr(sourceString,destString,start,appearPosition).instr('源字符串', '目标字符串' ,'开始位置','第几次出现')其中...

    在Oracle中

    可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符。

    其语法为:

    instr(sourceString,destString,start,appearPosition). instr('源字符串'

    , '目标字符串' ,'开始位置','第几次出现')

    其中sourceString代表源字符串;

    destString代表想聪源字符串中查找的子串;

    start代表查找的开始位置,该参数可选的,默认为1;

    appearPosition代表想从源字符中查找出第几次出现的destString,该参数也是可选的,默认为1;

    如果start的值为负数,那么代表从右往左进行查找,但是位置数据仍然从左向右计算。

    返回值为:查找到的字符串的位置。

    对于instr函数,我们经常这样使用:从一个字符串中查找指定子串的位置。例如:

    SQL> select instr('yuechaotianyuechao','ao') position from

    dual;

    POSITION

    ----------

    6

    从第7个字符开始搜索

    SQL> select instr('yuechaotianyuechao','ao', 7) position from

    dual;

    POSITION

    ----------

    17

    从第1个字符开始,搜索第2次出现子串的位置

    SQL> select instr('yuechaotianyuechao','ao', 1, 2) position from

    dual;

    POSITION

    ----------

    17

    注意:1。若‘起始位置’=0 时返回结果为0,

    2。这里只有三个参数,意思是查找第一个要查找字符的位置(因为

    ‘第几次出现’默认为1),

    当‘起始位置’不大于要查找的第一个字符的位置时,返回的值都将是第一个字符的位置,如果‘起始位置’大于要查找的第一个字符的位置时,返回的值都将是第2个字符的位置,依此类推……(但是也是以第一个字符开始计数)

    substr函数的用法,取得字符串中指定起始位置和长度的字符串 ,默认是从起始位置到结束的子串。

    substr( string, start_position, [ length ]

    ) substr('目标字符串',开始位置,长度)

    如:

    substr('This

    is a test', 6,

    2) would

    return 'is'

    substr('This

    is a test',

    6) would

    return 'is a test'

    substr('TechOnTheNet',

    -3,

    3) would

    return 'Net'

    substr('TechOnTheNet',

    -6,

    3) would

    return 'The'select substr('Thisisatest', -4, 2) value from

    dual

    -------------------------------------------------------------------------------------------------

    关于Instr()和substr()函数-

    INSTR共有4个参数;具体格式为:

    INSTR(strings|express,strings[,m,[n]])

    在一个字符串中搜索指定的字符,返回发现指定的字符的位置;

    strings|express 被搜索的字符串

    strings 希望搜索的字符串

    m 搜索的开始位置,默认为1

    n 第n次出现希望搜索的字符串的位置,默认为1

    1.被搜索的字符串可以为字符串,也可以为表达式

    如:

    QUOTE:

    SQL> select instr('my 2 firefly','i') result from dual;

    RESULT

    ----------

    7

    SQL> select instr(initcap('my 2 firefly')||'b','Fi') result from

    dual;

    RESULT

    ----------

    6

    2.希望搜索的字符串可以为字符或数字字符,(希望搜索的字符串长度可以1个或多个)

    如:

    QUOTE:

    SQL> select instr('my 2 firefly','i') result from dual;

    RESULT

    ----------

    7

    SQL> select instr('my 2 firefly','iref') result from dual;

    RESULT

    ----------

    7

    SQL> select instr('my 2 firefly',2) result from dual;

    RESULT

    ----------

    4

    SQL> select instr('my 2 firefly',22) result from dual;

    RESULT

    ----------

    0

    3.m表示要从第几个字符开始查找

    如:

    QUOTE:

    SQL> select instr('my 2 firefly','f',1) result from dual;

    RESULT

    ----------

    6

    注意:若m=0时返回结果为0

    select instr('my 2 firefly','f',0) result from dual;

    RESULT

    ----------

    0

    注意:这里只有三个参数,意思是查找第一个要查找字符的位置(因为n默认为1),

    当m不大于要查找的第一个字符的位置时,返回的值都将是第一个字符的位置,如果m大于要查找的第一个字符的位置时,返回的值都将是第2个字符的位置,依此类推……

    如:

    QUOTE:

    SQL> select instr('my 2 firefly','f',1) result from dual;

    RESULT

    ----------

    6

    SQL> select instr('my 2 firefly','f',3) result from dual;

    RESULT

    ----------

    6

    SQL> select instr('my 2 firefly','f',6) result from dual;

    RESULT

    ----------

    6

    SQL> select instr('my 2 firefly','f',7) result from dual;

    RESULT

    ----------

    10

    SQL> select instr('my 2 firefly','f',10) result from dual;

    RESULT

    ----------

    10

    当m大于要查找字符的最大的位置时,返回0

    QUOTE:

    SQL> select instr('my 2 firefly','f',11) result from dual;

    RESULT

    ----------

    0

    SQL> select instr('my 2 firefly','f',110) result from

    dual;

    RESULT

    ----------

    0

    反之亦然,若m<0,则表示从右向左来查找数据

    QUOTE:

    SQL> select instr('my 2 firefly','f',-1) result from dual;

    RESULT

    ----------

    10

    SQL> select instr('my 2 firefly','f',-2) result from dual;

    RESULT

    ----------

    10

    SQL> select instr('my 2 firefly','f',-4) result from dual;

    RESULT

    ----------

    6

    SQL> select instr('my 2 firefly','f',-40) result from

    dual;

    RESULT

    ----------

    0

    4.n表示要找第n个该字符

    如:

    QUOTE:

    SQL> select instr('my 2 firefly','f',1,1) result from

    dual;

    RESULT

    ----------

    6

    SQL> select instr('my 2 firefly','f',1,2) result from

    dual;

    RESULT

    ----------

    10

    SQL> select instr('my 2 firefly','f',1,3) result from

    dual;

    RESULT

    ----------

    0

    当n大于查找源中包含所要查找字符串的最大个数时,返回0

    如:

    QUOTE:

    SQL> select instr('my 2 firefly','f',1,4) result from

    dual;

    RESULT

    ----------

    0

    SQL> select instr('my 2 firefly','f',1,40) result from

    dual;

    RESULT

    ----------

    0

    当m<0时,表示从右向左查找,如:

    QUOTE:

    SQL> select instr('my 2 firefly','f',-10,1) result from

    dual;

    RESULT

    ----------

    0

    SQL> select instr('my 2 firefly','f',-8,1) result from

    dual;

    RESULT

    ----------

    0

    SQL> select instr('my 2 firefly','f',-3,1) result from

    dual;

    RESULT

    ----------

    10

    注意:当m不大于要查找的第一个字符的位置时,返回的值都将是第一个字符的位置,如果m大于要查找的第一个字符的位置时,返回的值都将是第2个字符的位置,依此类推……

    如:

    QUOTE:

    SQL> select instr('my 2 firefly','f',-4,1) result from

    dual;

    RESULT

    ----------

    6

    等同于:

    SQL> select instr('my 2 firefly','f',-1,2) result from

    dual;

    RESULT

    ----------

    6

    另注意:如果要查找的字符串为 NULL时,返回NULL

    如:

    SQL> select instr('my 2 firefly',null,-1,2) result from

    dual;

    RESULT

    ----------

    SQL> select instr('my 2 firefly',null) result from dual;

    RESULT

    ----------

    SQL> select instr('my 2 firefly',null,1) result from dual;

    RESULT

    ----------

    QUOTE:

    ================================================

    字符串截取函数substr(strings|express,m,[n])

    strings|express 被截取的字符串或字符串表达式

    m 从第m个字符开始截取

    n 截取后字符串长度为n

    1.被截取的为字符串或字符串表达式

    QUOTE:

    SQL> select substr(upper('abcde'),1,2) from dual;

    SUBSTR(UPPER('ABCDE'),1,2)

    --------------------------

    AB

    SQL> select substr('abcde',1,2) from dual;

    SUBSTR('ABCDE',1,2)

    -------------------

    ab

    2.如果m<0,则表示从右向左截取

    这里如果n>0,若n>=|m|,截取字符串长度为|m|个(从右向左截取),

    若n

    如:

    QUOTE:

    SQL> select substr('abcde',-4,2) from dual;

    SUBSTR('ABCDE',-4,2)

    --------------------

    bc

    SQL> select substr('abcde',-4,1) from dual;

    SUBSTR('ABCDE',-4,1)

    --------------------

    b

    SQL> select substr('abcde',-4,4) from dual;

    SUBSTR('ABCDE',-4,4)

    --------------------

    bcde

    SQL> select substr('abcde',-4,5) from dual;

    SUBSTR('ABCDE',-4,5)

    --------------------

    bcde

    SQL> select substr('abcde',-4,50) from dual;

    SUBSTR('ABCDE',-4,50)

    ---------------------

    bcde

    如果m<0,n=0结果为NULL:

    QUOTE:

    SQL> select substr('abcde',-4,0) from dual;

    SUBSTR('ABCDE',-4,0)

    --------------------

    SQL> select substr('abcde',-5,0) from dual;

    SUBSTR('ABCDE',-5,0)

    --------------------

    如果m<0,n<0结果为NULL:

    QUOTE:

    SQL> select substr('abcde',-2,0) from dual;

    SUBSTR('ABCDE',-2,0)

    --------------------

    SQL> select substr('abcde',-2,-1) from dual;

    SUBSTR('ABCDE',-2,-1)

    ---------------------

    SQL> select substr('abcde',-2,-4) from dual;

    SUBSTR('ABCDE',-2,-4)

    ---------------------

    SQL> select substr('abcde',-3,-4) from dual;

    SUBSTR('ABCDE',-3,-4)

    ---------------------

    3.如果n<=0,,结果为0:

    QUOTE:

    SQL> select substr('abcde',1,-4) from dual;

    SUBSTR('ABCDE',1,-4)

    --------------------

    SQL> select substr('abcde',1,-2) from dual;

    SUBSTR('ABCDE',1,-2)

    --------------------

    SQL> select substr('abcde',1,0) from dual;

    SUBSTR('ABCDE',1,0)

    -------------------

    SQL> select substr('abcde',1,-2) from dual;

    SUBSTR('ABCDE',1,-2)

    --------------------

    4.m,n只要有一个为NULL,那么结果为NULL

    QUOTE:

    SQL> select substr('abcde',1,null) from dual;

    SUBSTR('ABCDE',1,NULL)

    ----------------------

    SQL> select substr('abcde',null,null) from dual;

    SUBSTR('ABCDE',NULL,NULL)

    -------------------------

    SQL> select substr('abcde',null,1) from dual;

    SUBSTR('ABCDE',NULL,1)

    ----------------------

    5.不用n参数时:

    n=NULL里,结果为NULL

    n>=0,结果为从n个字符开始截取到最后

    QUOTE:

    SQL> select substr('abcde',null) from dual;

    SUBSTR('ABCDE',NULL)

    --------------------

    SQL> select substr('abcde',0) from dual;

    SUBSTR('ABCDE',0)

    -----------------

    abcde

    SQL> select substr('abcde',1) from dual;

    SUBSTR('ABCDE',1)

    -----------------

    abcde

    SQL> select substr('abcde',2) from dual;

    SUBSTR('ABCDE',2)

    -----------------

    bcde

    n<0时,如果|n|<=被截取字符串的长度,

    结果为从右向左截取|n|个字符

    QUOTE:

    SQL> select substr('abcde',-2) from dual;

    SUBSTR('ABCDE',-2)

    ------------------

    de

    SQL> select substr('abcde',-3) from dual;

    SUBSTR('ABCDE',-3)

    ------------------

    cde

    SQL> select substr('abcde',-5) from dual;

    SUBSTR('ABCDE',-5)

    ------------------

    abcde

    如果|n|>被截取字符串的长度,结果为NULL

    QUOTE:

    SQL> select substr('abcde',-6) from dual;

    SUBSTR('ABCDE',-6)

    ------------------

    SQL> select substr('abcde',-60) from dual;

    展开全文
  • V20_op_instr_0520_zh-CHS.pdf

    2021-06-13 16:16:06
    V20_op_instr_0520_zh-CHS.pdf
  • InStr 函数

    2021-05-25 09:02:44
    示例在表达式中使用 InStr 函数可以在任何可以使用表达式的地方使用InStr。 例如,如果要查找第一个周期 (。) IP 地址的字段中 (名为 IPAddress) ,可以使用 InStr 找到它,如下所示:InStr (1,[IPAddress],"。")...

    示例

    在表达式中使用 InStr 函数    可以在任何可以使用表达式的地方使用InStr。 例如,如果要查找第一个周期 (。) IP 地址的字段中 (名为 IPAddress) ,可以使用 InStr 找到它,如下所示:

    InStr (1,[IPAddress],"。")

    InStr函数检查 IPAddress 字段中的每个值,并返回第一个周期的位置。 因此,如果 IP 地址的第一部分为 10。,该函数返回值 3。

    然后,可以使用其他函数(针对 InStr 函数的输出操作)提取第一个周期之前 IP 地址的部分,如下所示:

    左 ([IPAddress], (InStr (1,[IPAddress],"。") -1) )

    此示例中 ,InStr (1,[IPAddress],"。") 返回第一个周期的位置。 减 1 可确定第一个周期之前的字符数,在这种情况下为 2。 然后 ,Left 函数从 IPAddress 字段左侧提取多个字符,并返回值 10。

    在 VBA 代码中使用InStr

    注意: 以下示例演示了在 VBA Visual Basic for Applications (模块) 函数。 有关使用 VBA 的信息,请在"搜索"旁边的下拉列表中选择"开发人员参考",在搜索框中输入一个或多个术语。

    此示例使用 InStr 函数返回一个字符串在另一个字符串中第一次出现的位置。

    Dim SearchString, SearchChar, MyPos

    SearchString ="XXpXXpXXPXXP" ' String to search in.

    SearchChar = "P" ' Search for "P".

    ' A textual comparison starting at position 4. Returns 6.

    MyPos = Instr(4, SearchString, SearchChar, 1)

    ' A binary comparison starting at position 1. Returns 9.

    MyPos = Instr(1, SearchString, SearchChar, 0)

    ' Comparison is binary by default

    ' (last argument is omitted).

    MyPos = Instr(SearchString, SearchChar) ' Returns 9.

    MyPos = Instr(1, SearchString, "W") ' Returns 0.

    展开全文
  • '《',1,1)+1,instr(name,'》',1,1)-instr(name,'《',1,1)-1) "书名", substr(name,instr(name,':',1,1)+1,instr(name,'出',-1,1) -instr(name,':',1,1)-1) "作者", substr(name,instr(name,'(',1,1)+1,instr(name...

    1.截取字符串:substr

    SUBSTR返回字符串的一部分,在指定的字符位置开始并延伸指定的字符数。

    SUBSTR计算使用的汉字输入的字符集定义的长度。

    SUBSTRB使用字节而不是字符。

    SUBSTRC使用Unicode字符完成。

    返回值:

    CHAR | NCHAR | VARCHAR2 | NVARCHAR2

    语法:

    { SUBSTR | SUBSTRB | SUBSTRC }(CHAR,position [,substring_length])

    其中,char代表元字符串,position代表开始的位置,substring_length是可选项,表示截取的字符串的长度。

    示列:

    ---- substr('ABCDEFG', 0);    --返回结果是:ABCDEFG,从0位开始截取后面所有

    SQL> select substr('ABCDEFG',0) from

    dual;

    SUBSTR(

    -------

    ABCDEFG

    ---- substr('ABCDEFG', 2);    --返回结果是:BCDEFG,从2位开始截取后面所有

    SQL> select substr('ABCDEFG',2) from

    dual;

    SUBSTR

    ------

    BCDEFG

    ---- substr('ABCDEFG', 0, 2);  --返回结果是:AB,从0位开始往后截取2个字符长度

    SQL> select substr('ABCDEFG',0,2) from

    dual;

    SU

    --

    AB

    ---- substr('ABCDEFG', 0, 10);  --返回结果是:ABCDEFG,虽然10超出了元字符串长度,但是系统会按元字符串最大数量返回,不会影响返回结果

    SQL> select substr('ABCDEFG',0,10) from

    dual;

    SUBSTR(

    -------

    ABCDEFG

    ---- substr('ABCDEFG', -3);  --返回结果是:EFG,如果是负数,则从尾部往前数,截取-3位置往后的所有字符串

    SQL> select substr('ABCDEFG',-2) from

    dual;

    SUB

    ---

    FG

    2.查找字符串位置:instr

    INSTR函数查找字符串的子字符串。该函数返回一个整数。

    INSTR计算使用的汉字输入的字符集定义字符串。

    INSTRB使用字节而不是字符。

    INSTRC使用Unicode字符完成。

    返回值

    NUMBER

    句法

    { INSTR | INSTRB | INSTRC } (string ,

    substring [, position [, occurrence ] ])

    其中sting是元字符串;substring是要查找的字符串;position是要查找的开始位置,是可选项,默认为1,所以,注意,在这里字符串搜索是从1开始的,如果此参数为正,则从左到右检索,如果此参数为负,则从右到左检索;occurrence是元字符串中第几次出现的子字符串,也是可选项,默认为1,如果是负数则报错。

    示列:

    ---- instr('ABCDEFG', 'AB');   --返回结果是:1,因为instr字符串索引从1开始,所以是1不是0

    SQL> select instr('ABCDEFG','AB') from

    dual;

    INSTR('ABCDEFG','AB')

    ---------------------

    1

    ---- instr('CDEFGACAB','AB');  --返回结果是8,原因同上

    SQL> select instr('CDEFGACAB','AB') from

    dual;

    INSTR('CDEFGACAB','AB')

    -----------------------

    8

    ---- instr('ABCDabcdABCD','AB',1,2);

    --返回结果是:9,返回第二次出现'AB'的位置

    SQL> select

    instr('ABCDabcdABCD','AB',1,2) from dual;

    INSTR('ABCDABCDABCD','AB',1,2)

    ------------------------------

    9

    ---- instr(' A BCDabcdABCD','AB',4,1);

    --返回结果是:11,从第4个字符开始查找第一次出现'AB'的位置。1个空格也算一个字符

    SQL> select instr(' A

    BCDabcdABCD','AB',4,1) from dual;

    INSTR('ABCDABCDABCD','AB',4,1)

    ------------------------------

    11

    3.替换字符串:replace

    更换搜索的字符串,用另一个字符串替换它,并返回修改后的字符串。

    返回值

    CHAR | NCHAR | VARCHAR2 | NVARCHAR2

    语法

    REPLACE(char, search_string [,

    replacement_string ])

    表示在char中查找search_string,replacement_string是替换search_string的字符串,如果没有该字符串,表示将search_string字符串删除。

    示列:

    ---- replace('ABCDEF', 'CDE');  --返回结果是:ABF

    SQL> select replace('ABCDEF','CDE') from

    dual;

    REP

    ---

    ABF

    ---- replace('ABCDEF', 'CDE', 'cdE');

    --返回结果是:ABcdEF

    SQL> select

    replace('ABCDEF','CDE','cdE') from dual;

    REPLAC

    ------

    ABcdEF

    ---- replace('ABCDEF', 'CDE', ' ');

    --返回结果是:AB F,CDE被替换成一个空格

    SQL> select replace('ABCDEF','CDE',' ')

    from dual;

    REPL

    ----

    AB F

    4.substr和instr相结合

    ----实现截取指定字符之间的字符串,常常将substr和instr相结合使用

    ----instr找到截取字符串位置,substr再截取

    示列:

    SQL> create table test(name

    varchar2(100));

    SQL> insert into test values('abc-ABCdef-GH-IJKLM');

    SQL> insert into test

    values('OPQ-rstN-uVW-XYZ');

    ----截取第三串字符(就是第二次出现“-”和第三次出现“-”之间的字符)

    ------思路:

    SQL> select * from test;

    NAME

    --------------------------------------------------------------------------------

    abc-ABCdef-GH-IJKLM

    OPQ-rstN-uVW-XYZ

    --查找第二次出现"-"的位数

    SQL> select instr(name,'-',1,2) from

    test;

    INSTR(NAME,'-',1,2)

    -------------------

    11

    9

    ----查找第三次出现“-”的位置

    SQL> select instr(name,'-',1,3) from

    test;

    INSTR(NAME,'-',1,3)

    -------------------

    14

    13

    ----也就是说,需要截取的就是上面的位置,如:(注意找规律)

    SQL> select substr(name,12,2) from test;

    SUBS

    ----

    GH

    W-

    SQL> select substr(name,10,3) from test;

    SUBSTR

    ------

    f-G

    uVW

    ----最后用instr和substr相结合:

    SQL> select substr(name,instr(name,'-',1,2)+1,instr(name,'-',1,3)-instr(name,'-',1,2)-1)

    from test;

    SUBSTR(NAME,INSTR(NAME,'-',1,2)+1,INSTR(NAME,'-',1,3)-INSTR(NAME,'-',1,2)-1)

    --------------------------------------------------------------------------------

    GH

    uVW

    ----在比如:

    select substr(name,instr(name,'《',1,1)+1,instr(name,'》',1,1)-instr(name,'《',1,1)-1)

    "书名",

    substr(name,instr(name,':',1,1)+1,instr(name,'出',-1,1)

    -instr(name,':',1,1)-1) "作者",

    substr(name,instr(name,'(',1,1)+1,instr(name,')',1,1)-instr(name,'(',1,1)-1)

    "年份",

    name

    from books;

    书名

    作者

    年份

    NAME

    oracle数据库性能优化

    盖国强

    2005

    《oracle数据库性能优化》 作者:盖国强出版(2005)

    oracle编程艺术

    Thomas Kyte

    2011

    《oracle编程艺术》 作者:Thomas Kyte出版(2011)

    ----上面查询作者时,instr(name,'出',-1,1),用-1从字符串右边开始读取的原因是,“出”右边不会有和他重复的字,如果还是从左边开始读取,如果书名中有“出”就会截取不到作者咯

    5.update和replace相结合

    ----update和replace相结合可以实现批量更新

    ----示列:

    select id,name,replace(name,'oracle','数据库') from

    books;

    ID

    NAME

    REPLACE(NAME,'ORACLE','数据库'

    1500

    《oracle数据库性能优化》

    《数据库数据库性能优化》

    1552

    《oracle编程艺术》

    《数据库编程艺术》

    1008

    《我们都是oracle工程师》

    《我们都是数据库工程师》

    1009

    《我接触过oracle》

    《我接触过数据库》

    update books set

    name=replace(name,'oracle','数据库') where id in (1500,1008,1009);

    select * from books;

    ID

    NAME

    1500

    《数据库数据库性能优化》

    1552

    《oracle编程艺术》

    1008

    《我们都是数据库工程师》

    1009

    《我接触过数据库》

    reference     substr

    instr

    replace

    展开全文
  • visa资源
  • vb中instr函数

    2012-11-12 21:33:29
    教你如何在vb中使用instr函数
  • -- 实现1CREATE FUNCTION instr(varchar, varchar) RETURNS integer AS$$ DECLARE pos integer;BEGINpos := instr($1, $2, 1);RETURN pos;END;$$ LANGUAGE plpgsql STRICT IMMUTABLE;-- 实现2CREATE FUNCTION instr...
  • Oracle REGEXP_INSTR 用法

    2021-05-08 18:25:02
    ORACLE中的支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE :与LIKE的功能相似2,REGEXP_INSTR :与INSTR的功能相似3,REGEXP_SUBSTR :与SUBSTR的功能相似4,REGEXP_REPLACE :与REPLACE的功能相似它们在用法...
  • 一个迁移项目遇到的,MySQL的instr函数只能查找子串是否在父串中,无法按照出现的次数进行查找。这里我本身写了一个,以便迁移。固然我这里仅仅针对的是迁移,可能没有彻底实现原有函数的细节。Oracle 里用了几回...
  • INSTR

    2018-11-14 17:31:13
    本页目录 语法 入参 功能描述 示例 ...INT instr( string1, string2 ) INT instr( string1, string2 [, start_position [, nth_appearance ] ] ) 入参 string1 VARCHAR类型,源字符串. stri...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 68,064
精华内容 27,225
关键字:

INSTR()