1. sql 替换 两特定字符(含特定字符)之间的字段
如果我说如果啊,如果是abc?def?ghi?jkl你打算怎么换是abc+jkl还是abc++jkl,当然如果没有这种情况算我没说。
还有你什么数据库啊,不同的数据库用到的函数也不是完全一样的。当然如果都是三位的那就简单了,如果不都是3位的,那在用下面的方法
比如定位中oracle用instr,sqlserver中用charindex
(1)定位,定位?的位置,不知道你的?是不是字符型的,我假设它是字符型的
oracle:instr('?',字段,1,1)(第一次出现问号的位置),instr('?',字段,-1,1)(最后一次出现问号的位置),如果只有两个问号也可以写成instr('?',字段,1,2)
sqlserver:charindex('?',字段,1)(第一次出现问号),len(字段)-(charindex('?',reverse(字段))-1)(最后一次出现问号),如果只有两个问号,可以写成charindex('?',字段,charindex('?',字段,1)+1)
(2)截取需要替换的字符串substring函数,这个二者基本差不多
(3)替换,二者也是大同小异(函数基本相同,但写法上有些区别),我就写一个。
oracle: select replace(字段,subter(字段,instr('?',字段,1,1),instr('?',字段,-1,1)),'+') from table
至于sqlserver的那就自己完成吧,oracle我的把握大一些,sqlserver需要试验才行,我这里可没有相关环境。
注:我忘了问号需不需要转译了,这个你自己试试看吧。
2. sqlserver中如何进行截取字符串然后再计算
oracle中的方法可以这样,但是不知道sql server中支不支持相应的函数,你可以试一下
select replace(t.number,'m','') num from table1 t //去掉m 变成100*200但是这是varchar类型不是数字
(1)instr(replace(t.number,'m',''),'*',1) 从100*200的第1位截取到 '*' 的长度,注:这时是长度,不是数字100
substr(num,1,instr(replace(t.number,'m',''),'*',1)-1) 从第一位截取到'*'之前,即取出100
(2)instr(replace(t.number,'m',''),'*',-1) 从100*200的最后1位截取到 '*' 的长度
substr(num,-1,instr(replace(t.number,'m',''),'*',-1)-1) 取出200
然后(1)*(2)就可以了(把substr里面的num换成 replace(t.number,'m',''))
思路就这样,你再整理一下就可以了
3. oracle 中的instr替换成sqlserver的什么函数
Oracle:INSTR(<C1>,<C2>[,I][,J])
SQL Server:CHARINDEX(<C1>,<C2>[,I])
说明:在C2中从I开始搜索C1第1次出现的位置。I:默认1
4. SQL语句查询条件有没有包含的函数
当然有啊
看你什么数据库了
oracle里叫instr,sqlserver里叫charindex
不过返回的不是真假,而是0或其他数字,如果是0,表示不包含,如果是大于0的,则表示包含
instr和charindex的用法你查查网络吧,主要就是某一个字符串是否包含另一个字符串,如果包含的话,返回的是这个字符串的起始位置
5. sql中如何在where字句里截取某个字段的前几位字符
sql中在where字句里截取字符方法如下:
1、如果是sqlserver:where left(p.end_time,4) = '2012'。
2、如果是Oracle:where substr(p.end_time,0,4) = '2012'。
举例:
1、oracle: 'where substr(字段名,1,2)='''123''''
2、sqlserver: 'where substring(字段名,1,2)='''123''''
(5)instrsqlserver扩展阅读:
sql中,常用函数介绍:
1、AVG():返回平均值
2、COUNT():返回行数
3、FIRST():返回第一个记录的值
4、LAST():返回最后一个记录的值
5、MAX():返回最大值
6、MIN():返回最小值
7、SUM():返回总和
8、UCASE():将某个字段转换为大写
9、LCASE():将某个字段转换为小写
10、MID():从某个文本字段提取字符
11、LEN():返回某个文本字段的长度
12、ROUND():对某个数值字段进行指定小数位数的四舍五入
13、NOW():返回当前的系统日期和时间
14、FORMAT():格式化某个字段的显示方式
15、INSTR():返回在某个文本域中指定字符的数值位置
16、LEFT():返回某个被请求的文本域的左侧部分
17、RIGHT():返回某个被请求的文本域的右侧部分
6. mysql code转换
今天处理一个需求,表字段中存的是以逗号分割的code,另一张表中存放着code对应的code_name,现在又要要求把表中的字段的code转换成code_name并以逗号分割,形式和表字段相同。
需求说明:
Mysql:用逗号分割的CODE转换成NAMEX
Mysql:用逗号分割的CODE转换成NAME
达到的效果:
Mysql:用逗号分割的CODE转换成NAME
为了解决这个问题我就想到以前用sqlserver写的split函数,准备拿过来修改下,结果发现两个create function 语法不通,试图修改了下然后发现mysql貌似不支持表变量。这下完了,就不能把逗号分割的code以表的形式传出来去匹配了。然后去网上找mysql的split函数发现怎么这么麻烦,写一个函数,还要先创建两个函数做铺垫。果断放弃了。
然后找了一些资料用mysql自带的函数解决了这个问题
1、INSTR函数(INSTR相当于sqlserver的CharIndex函
7. SQLserver字符型数据在哪里
语法如下:instr(string1,string2,start_position,nth_appearance)。
SqlServer有如下几种聚合函数SUM、AVG、COUNT、COUNT(*)、MAX和MIN,但是这些函数都只能聚合数值类型,无法聚合字符串。
8. sql 怎样定位一个字符所在的位置
可以通过INSTR方法来进行查询:
sql:select INSTR('abcdefg ','c') from al;
输出结果:3。
解释:以上sql就是查询c字符在“abcdefg”中的位置。
9. sql 删除指定字符串
1、创建数据库表