sql 中substr()方法

the_bog 2017-01-17 03:30:11
百度上搜关于sql substr()答案各异各种矛盾含糊不清,难以理解,



现在求大神帮忙解答:
substr('string',1,2)答案是???有人说这个答案是st
substr('string',-1,2)答案是???有人说这个答案是ng
substr('string',0,2)答案是???
...全文
1439 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
乞子王 2019-09-24
  • 打赏
  • 举报
回复
mysql里面都不一样,第一个是st,第二个空,第三个g
the_bog 2017-01-19
  • 打赏
  • 举报
回复
引用 2 楼 js14982 的回复:
乱七八糟啊,谁说能从右往左取了? oracle提供了一个反转字符串的函数 reverse,你想从右往左去可以结合这个函数实现。 substr('string',1,2) 和 substr('string',0,2)是一样的,都是从第一位开始往后取2位(即默认第0位位空)
在数据库全部试了,和你说的一样,老哥,稳
我不叫康师傅 2017-01-18
  • 打赏
  • 举报
回复
这个的话你装个软件 粘贴进去不就好了 我以前也认识一个人,去考sql数据库,到考完试她都没有进入过这个软件,所以我估计你是不是也在考证 这样不太好,多试验一下,很多东西都是自己尝试出来的,也是因为这样每个程序员编程都不一样。 给你一个我自己玩字符串的小程序你看着玩吧

with Core as  
(select co.course_number, 
(case  
when termid=((substr('¶m1',1,4))-'1990') *100 
then substr('¶m1',1,9) 
when termid=((substr('¶m1',1,4))-'1990')*100+1 
then 'S1' 
when termid=((substr('¶m1',1,4))-'1990')*100+2 
then 'S2' 
when termid=((substr('¶m1',1,4))-'1990')*100+3 
then 'Q1' 
when termid=((substr('¶m1',1,4))-'1990')*100+4 
then 'Q2' 
when termid=((substr('¶m1',1,4))-'1990')*100+5 
then 'Q3' 
when termid=((substr('¶m1',1,4))-'1990')*100+6 
then 'Q4' 
end)  
as Term, 
co.course_name,cc.section_number,cc.teacherid,cc.studentid from 
cc  join courses co 
on co.course_number=cc.course_number 
and termid>=UPPER( 
(select ((substr('¶m1',1,4))-'1990')*100 from dual)) 
group by co.course_number, co.course_name,cc.section_number,cc.teacherid,cc.studentid, 
(case  
when termid=((substr('¶m1',1,4))-'1990') *100 
then substr('¶m1',1,9) 
when termid=((substr('¶m1',1,4))-'1990')*100+1 
then 'S1' 
when termid=((substr('¶m1',1,4))-'1990')*100+2 
then 'S2' 
when termid=((substr('¶m1',1,4))-'1990')*100+3 
then 'Q1' 
when termid=((substr('¶m1',1,4))-'1990')*100+4 
then 'Q2' 
when termid=((substr('¶m1',1,4))-'1990')*100+5 
then 'Q3' 
when termid=((substr('¶m1',1,4))-'1990')*100+6 
then 'Q4' 
end) 
order by course_number,section_number) 
SELECT COURSE_NUMBER,TERM,COURSE_NAME,SECTION_NUMBER,TEACHERNAME,STUDENT_NUMBER,StudentName,HOME_ROOM,FATHERPHONE,FATHEREMAIL,MOTHERPHONE,MOTHEREMAIL FROM 
( 
select course_number,Term,course_name,section_number,t.lastfirst as TeacherName,student_number,s.lastfirst as StudentName,s.home_room,MF.CUST_FATHERMOBILEPHONE AS FATHERPHONE,MF.CUST_FATHEREMAIL AS FATHEREMAIL,MF.CUST_MOTHERMOBILEPHONE AS MOTHERPHONE,MF.CUST_MOTHEREMAIL AS MOTHEREMAIL 
from students s 
join core c 
on s.id=c.studentid 
and s.enroll_status='0' 
join teachers t 
on t.id=c.teacherid 
join U_STUDENTSUSERFIELDS MF 
on MF.studentsdcid=s.dcid 
) 
WHERE  
course_NUMBER=UPPER('¶m2') 
and 
( 
(case  
when   
'¶m3' is null  
and 1=1 
then 1 end )=1 
or  
(case  
when  '¶m3' is not null  
and 
( 
section_number in ( 
  select substr(regexp_substr(UPPER('¶m3'), 
                            '[^,]+', 
                            1, 
                            level), 
              1 
              ,40) 
  from dual 
  connect by level <= regexp_count(UPPER('¶m3'), 
                                   ',') + 1) 
) 
then 1 end)=1 
) 
order by course_number,section_number,studentname,student_number 
;
sych888 2017-01-18
  • 打赏
  • 举报
回复
用负数 SQL> select substr('123456',1,2) from dual; SU -- 12 SQL> select substr('123456',-2) from dual; SU -- 56
jdsnhan 2017-01-18
  • 打赏
  • 举报
回复
主席教导我们说,实践是检验真理的唯一标准
卖水果的net 2017-01-17
  • 打赏
  • 举报
回复
引用 2 楼 js14982的回复:
乱七八糟啊,谁说能从右往左取了? oracle提供了一个反转字符串的函数 reverse,你想从右往左去可以结合这个函数实现。 substr('string',1,2) 和 substr('string',0,2)是一样的,都是从第一位开始往后取2位(即默认第0位位空)
可以从右侧开始取,第二个参数为负数就可以了。 建议楼主实际运行一下,一目了然。
js14982 2017-01-17
  • 打赏
  • 举报
回复
乱七八糟啊,谁说能从右往左取了? oracle提供了一个反转字符串的函数 reverse,你想从右往左去可以结合这个函数实现。 substr('string',1,2) 和 substr('string',0,2)是一样的,都是从第一位开始往后取2位(即默认第0位位空)
落落叶叶无声 2017-01-17
  • 打赏
  • 举报
回复
substr('string',1,2) ==> st substr('string',-1,2) ==> g substr('string',0,2) ==> st 楼主 我建议你养成看官网资料的习惯,官网资料是开发者们写的应该是最权威的。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧