前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL函数 $FIND

SQL函数 $FIND

作者头像
用户7741497
发布2022-04-02 16:28:30
1K0
发布2022-04-02 16:28:30
举报
文章被收录于专栏:hml_知识记录hml_知识记录

SQL函数 $FIND

字符串函数,返回字符串中子字符串的结束位置,可选的搜索起始点。

大纲

代码语言:javascript
复制
$FIND(string,substring[,start])

参数

  • string - 要搜索的目标字符串。 它可以是变量名、数值、字符串字面值或任何有效表达式。
  • substring - 要搜索的子字符串。 它可以是变量名、数值、字符串字面值或任何有效表达式。
  • start - 可选-子字符串搜索的起始点,指定为正整数。 从字符串开始的字符计数,从1开始计数。 若要从字符串的开头开始搜索,请忽略此参数或指定从01开始。 负数、空字符串或非数字值将被视为0。 指定startNULL会导致$FIND返回< NULL >

$FIND返回SMALLINT数据类型。

描述

$FIND返回一个整数,指定子字符串在字符串中的结束位置。 $FIND搜索字符串的子字符串。 如果找到子字符串,$FIND返回子字符串后面第一个字符的整数位置。 如果substring未找到,$FIND返回0值。

可以包含start选项来指定搜索的起始位置。 如果start大于字符串中的字符数,$FIND返回一个值为0。 如果省略start,则默认为字符串位置1。 如果起始值为0、负数或非数字字符串,则位置1是默认值。

$FIND是区分大小写的。 使用其中一个大小写转换函数来定位字母或字符串的大写和小写实例。

$FIND, POSITION, CHARINDEX, INSTR

$FIND, POSITION, CHARINDEXINSTR都在字符串中搜索指定的子字符串,并返回与第一个匹配项对应的整数位置。 $FIND返回匹配子字符串结束后第一个字符的整数位置。 CHARINDEXPOSITIONINSTR返回匹配子字符串的第一个字符的整数位置。 CHARINDEX$FINDINSTR支持指定子字符串搜索的起始点。 INSTR还支持从起始点指定子字符串出现。

下面的示例演示了这四个函数,指定了所有可选参数。 注意,在这些函数中,stringsubstring的位置不同:

代码语言:javascript
复制
SELECT POSITION('br' IN 'The broken brown briefcase') AS Position,
       CHARINDEX('br','The broken brown briefcase',6) AS Charindex,
       $FIND('The broken brown briefcase','br',6) AS Find,
       INSTR('The broken brown briefcase','br',6,2) AS Inst
       
       
5   12  14  18

示例

在下面的例子中,字符串包含字符串“ABCDEFG”,子字符串包含字符串“BCD”$FIND函数返回值5,表示字符(“E”)在“BCD”后面的位置:

代码语言:javascript
复制
SELECT $FIND('ABCDEG','BCD') AS SubPoint

5

在示例中,通过数字“987654321”查找数字“7”。 它返回4,子字符串后面的位置:

代码语言:javascript
复制
SELECT $FIND(987654321,7) AS SubPoint

4

下面的例子返回3,即子字符串“AA”的第一个实例后面的字符位置:

代码语言:javascript
复制
SELECT $FIND('AAAAAA','AA') AS SubPoint

3

在下面的例子中,$FIND搜索不在字符串中的子字符串。 它返回0 (0):

代码语言:javascript
复制
SELECT $FIND('AABBCCDD','AC') AS SubPoint

0

在下面的例子中,$FIND从第7个字符开始搜索。 下面的例子返回14,也就是下一个出现“R”的字符的位置:

代码语言:javascript
复制
SELECT $FIND('EVERGREEN FOREST','R',7) AS SubPoint

14

在下面的例子中,$FIND在字符串的最后一个字符之后开始搜索。 它返回0 (0):

代码语言:javascript
复制
SELECT $FIND('ABCDEFG','G',10) AS SubPoint

0

下面的嵌入式SQL示例显示,小于1的开始将被视为1:

代码语言:javascript
复制
ClassMethod Find()
{
    s a="ABCDEFG"
    s b="F"
    &sql(SELECT 
    $FIND(:a,:b),
    $FIND(:a,:b,1),
    $FIND(:a,:b,0),
    $FIND(:a,:b,-35)
    INTO :a1,:a2,:a3,:a4)
    if SQLCODE'=0 {
        w !,"Error code ",SQLCODE }
    else {
        w !,"The input string: ",a
        w !,"Two-arg: ",a1
        w !,"3rd arg 1: ",a2
        w !,"3rd arg 0: ",a3
        w !,"3rd arg negative: ",a4 }
}
代码语言:javascript
复制
DHC-APP>d ##class(PHA.TEST.SQLCommand).Find()
 
The input string: ABCDEFG
Two-arg: 7
3rd arg 1: 7
3rd arg 0: 7
3rd arg negative: 7

下面的嵌入式SQL示例使用$FIND来搜索包含pi$CHAR(960)Unicode字符的字符串。 第一个$FIND返回pi后面的字符5。 第二个$FIND也返回5; 它从字符4开始搜索,也就是圆周率,也就是搜索的字符。 第三个$FIND从字符5开始搜索; 它返回13,这是pi下一个出现的位置。 注意,返回位置13,即使位置12是字符串中的最后一个字符:

代码语言:javascript
复制
ClassMethod Find1()
{
    s a="QT "_$CHAR(960)_" HONEY "_$CHAR(960)
    s b=$CHAR(960)
    &sql(SELECT 
    $FIND(:a,:b),
    $FIND(:a,:b,4),
    $FIND(:a,:b,5)
    INTO :a1,:a2,:a3)
    if SQLCODE'=0 {
        w !,"Error code ",SQLCODE }
    else {
        w !,"The input string: ",a
        w !,"From beginning: ",a1
        w !,"From position 4: ",a2
        w !,"From position 5: ",a3 
    }
}
代码语言:javascript
复制
DHC-APP>d ##class(PHA.TEST.SQLCommand).Find1()
 
The input string: QT π HONEY π
From beginning: 5
From position 4: 5
From position 5: 13

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SQL函数 $FIND
  • 大纲
  • 参数
  • 描述
    • $FIND, POSITION, CHARINDEX, INSTR
    • 示例
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档