oracle截取字符串(截取某个字符前面的字符串)

已验证。

要求:A.数据库表中的一个字符串 可能含有"+" 例:ORC+001

  也可能不含“+”

  B.要求如果该字符串含有“+”,则取“+”之前的字符 例:ORC+001 取ORC

  C.如果该字符串不含"+",则直接取该字符串。

  解答:利用ORACLE中 INSTR,SUBSTR以及CASE WHEN语法即可实现。

  Oracle中函数

  INSTR:INSTR方法的格式为

  INSTR(源字符串, 目标字符串, 起始位置, 匹配序号)

  默认查找顺序为从左到右。当起始位置为负数的时候,从右边开始查找。

  例:Select INSTR(‘ORC+001‘,‘+‘,1,1) from dual

  返回的是"4" 如果该字符串没有匹配字符 返回的是“0”。

  SUBSTR:取子字符串 取子字符串

  SUBSTR(源字符串,起始位置,要取多少位)

  从“起始位置”开始,取“多少"个

  例 Select SUBSTR(‘ORC+001‘,1,3) from dual;

  返回的是“ORC”

  全例如下

  表T_RCV_ISSUE

  WH_CD字段

  取 WH_CD 如果该字段包含"+",取“+”之前的字符

  如果该字段没有"+",取整个字段

  T_RCV_ISSUE表

  WH_CD 分别为 MR-PS+007,MR-WS,MR-WS+001,MR-PS

  执行

  SELECT CASE

  WHEN INSTR(WH_CD, ‘+‘, 1, 1) > 0

  THEN SUBSTR(WH_CD, 1, INSTR(WH_CD, ‘+‘, 1, 1) - 1)

  ELSE WH_CD

  END AS WH_CD

  from T_RCV_ISSUE

  结果:MR-PS,MR-WS,MR-WS,MR-PS ......

时间: 2024-12-28 01:52:26

oracle截取字符串(截取某个字符前面的字符串)的相关文章

字符串比较、字符指针和字符串的存储位置

字符指针==的意义:判断两个指针是否指向同一地址 字符指针存在栈里,字符串存在字符数组里(静态数组在栈里)或者在字符常量区,字符常量区没有重复的字符串 int main() { char *s1 = "abc";//s1在栈上,"abc"在字符常量区,s3也指向这个"abc" char *s3 = "abc"; char s2[] = "abc";//"abc"在栈上 char *s4

struct模块拆分字符串为指定字符数的字符串或元组

import struct # unpack() parses the string to a tuple format = '1s2s1s1s' line = '12345' col = struct.unpack(format, line) print col # calcsize() returns the number of characters # in a given format string format = '30s30s20s1s' print struct.calcsize

使用sscanf函数提取某个字符串中某个字符后面的字符串的方法

1,例子1: #include <stdio.h>#include <stdlib.h>main(){char s[]="abc 123 n:xyz";char s2[80];sscanf(s,"%*[^:]:%s",s2);printf("%s",s2);} 2,例子2:取出=之后的数字 // 格式 "verno=DP_B002_REL_V10","interval=0",&quo

OC字符串截取方法

OC字符串常用截取方法 1 /** 2 * substringFromIndex:字符串截取方法,从某索引开始截取到最后 3 * substringToIndex:从索引0开始截取到某索引 4 * substringWithRange:从某索引开始,截取一定长度的字符 5 * substringByReplacingOccurrencesOfString:字符串替换 6 */ 7 #import <Foundation/Foundation.h> 8 9 int main(int argc,

Shell字符串截取(非常详细)

Shell 截取字符串通常有两种方式:从指定位置开始截取和从指定字符(子字符串)开始截取. 从指定位置开始截取 这种方式需要两个参数:除了指定起始位置,还需要截取长度,才能最终确定要截取的字符串. 既然需要指定起始位置,那么就涉及到计数方向的问题,到底是从字符串左边开始计数,还是从字符串右边开始计数.答案是 Shell 同时支持两种计数方式. 1) 从字符串左边开始计数 如果想从字符串的左边开始计数,那么截取字符串的具体格式如下: ${string: start :length} 其中,stri

字符数组和字符串指针的定义

今天在看书上的一段代码的时候发现有一段代码有问题,对于那段代码的错误进行一下解释. 并加强一下我们常用的两种定义字符串的方法的一些区别进行一下解释. 书上的错误代码大概如下: #include<stdio.h> void copy(char *x,char *y) { for(;*y!='\0';x++,y++) *x=*y; *x='\0'; printf("%s\n",a); } int main() { char *a="Hello!"; char

【转载】C# 字符串截取指定长度的中文字符--精点

通常,一个中文会占两个字节的空间.很多语言里,一个中文字符就算是2个字符长度. 但在C#中,string里包含的中文字符只占一个字符长度.这就导致很多时候,使用string.SubString(int startIndex,int length)方法来截取字符会错位. 最近由于工作原因,会截取指定长度的字符来使用.但是在文档里,1个中文是2个长度来计算.刚开始还只是以为文档错误,后来才知道是由于C#的差异造成的. 刚开始,是直接到网上找算法,但是找到的算法,基本思路都是挨个字符判断(根据ASCI

截取开始字符串 结束字符串的中间字符串并返回

/// <summary> /// 指定开始字符串和结束字符串,截取中间的字符 /// </summary> /// <param name="str">要截取的字符串</param> /// <param name="s">开始字符串</param> /// <param name="e">结束字符串</param> /// <returns&

js字符串长度计算(一个汉字==两个字符)和字符串截取

js字符串长度计算(一个汉字==两个字符)和字符串截取 String.prototype.realLength = function() { return this.replace(/[^\x00-\xff]/g, "**").length; // [^\x00-\xff] - 匹配非双字节的字符 }; String.prototype.realSubstring = function(n){ var str = this||''; if(this.realLength()<=n