sql从“指定字段”查找“指定字符”,外加条件判断函数返回指定条件填充

SubStr(abcdrfg/sdas/ghg,3,CASE WHEN INSTR(abcdrfg/sdas/ghg,’/’,3,1) = 0 THEN 10 ELSE (instr(abcdrfg/sdas/ghg,’/’,3,1)-1) END)

这次的嵌套函数可以让我们从“abcdrfg/sdas/ghg”字段中提取“指定字符”前边或后边的字符,并通过条件判断是否含有该字符,从而返回我们需要的值。

公式解析:
SubStr(cExpression,nStartPosition ,[nCharactersReturned])
● cExpression指定要从其中返回字符串的字符表达式或备注字段;
● nStartPosition用于指定返回的字符串在字符表达式或备注字段中的位置
● nCharactersReturned用于指定返回的字符数目,缺省时返回字符表达式的值结束前的全部字符。
例:
SELECT SubStr(syranmo,3 ,2) FROM dual; – 返回 ra
表示从“syranmo”字段第3字符开始提取2字符。

注:其中“syranmo”字段可以为sql表“列名”。

instr( string1, string2, start_position,nth_appearance )
● string1:源字符串,要在此字符串中查找。
● string2:要在string1中查找的字符串 。
● start_position:代表string1 的哪个位置开始查找。此参数可选,如果省略默认为1. 字符串索引从1开始。如果此参数为正,从左到右开始检索,如果此参数为负,从右到左检索,返回要查找的字符串在源字符串中的开始索引。
● nth_appearance:代表要查找第几次出现的string2. 此参数可选,如果省略,默认为 1.如果为负数系统会报错。
位置索引号从1开始,如果String2在String1中没有找到,instr函数返回 “ 0 ”。
例:
SELECT instr(‘syranmo’,‘s’) FROM dual; – 返回 1
 SELECT instr(‘syranmo’,‘ra’) FROM dual; – 返回 3
 SELECT instr(‘syranmo’,‘at’,1,2) FROM dual; – 返回 0
 
 SELECT instr(‘syra/nm/o’,’/’,2,1) FROM dual; – 返回 4
返回从第二字符开始查找第一次出现“/”字符的位置

CASE WHEN THEN 多条件判断
(CASE WHEN条件1THEN结果1
WHEN条件2THEN结果2 …… WHEN条件3THEN结果3
ELSE结果X END)

Case具有两种格式。简单Case函数和Case搜索函数。
1、简单case函数
CASE  
   WHEN  THEN 
   WHEN  THEN 
   ...
   ELSE 
END 
例:
select  col_name
when  1  then  "第1列"
when  2  then  "第2列"
when  3  then  "第3列"
else  "其它列"
end
表示当 col_name等于1,返回第1列;等于2,返回第2列;等于3,返回第3列;否则返回“其他列”
2、case搜索函数
类似if判断,case搜索函数可以写判断,并且只会返回第一个符合条件的值,其他case被忽略
CASE
    WHEN <条件1> THEN <结果1>
    WHEN <条件2> THEN <结果2>
    ...
    ELSE <结果>
END 
例:
case 
when  col_name<=1  then "第1列"
when  col_name=2  then "第2列"
when  col_name>=3  then "第3列"
else   "其他列"
end  
表示当 col_name小于等于1,返回第1列;等于2,返回第2列;大于等于3,返回第3列;否则返回“其他列”

来看我们最上边嵌套公式:
SubStr(abcdrfg/sdas/ghg,3,CASE WHEN INSTR(abcdrfg/sdas/ghg,’/’,3,1) = 0 THEN 10 ELSE (instr(abcdrfg/sdas/ghg,’/’,3,1)-1) END)
表示从“abcdrfg/sdas/ghg”字段第3字符开始截取“CASE WHEN INSTR((abcdrfg/sdas/ghg,’/’,3,1) = 0 THEN 10 ELSE (instr(abcdrfg/sdas/ghg,’/’,3,1)-1) END”这么多字符

CASE WHEN INSTR(abcdrfg/sdas/ghg,’/’,3,1) = 0 THEN 10 ELSE (instr(abcdrfg/sdas/ghg,’/’,3,1)-1) END
表示当INSTR(abcdrfg/sdas/ghg,’/’,3,1) = 0 时返回10,否则返回 (instr(abcdrfg/sdas/ghg,’/’,3,1)-1)

INSTR(abcdrfg/sdas/ghg,’/’,3,1)
表示查找字段abcdrfg/sdas/ghg 中“/”字符,从第3字符开始查找,查找到第1次出现“/”字符。–返回值6,为cdrfg/
instr(abcdrfg/sdas/ghg,’/’,3,1)-1
表示查找字段abcdrfg/sdas/ghg 中“/”字符,从第3字符开始查找,查找到第1次出现“/”字符。–返回值6 在减去1结果为5,为cdrfg

你可能感兴趣的:(数据库)