栀八月yu 2022-11-14 17:30 采纳率: 76.3%
浏览 134
已结题

sql server截取某个特定字符后的字符串

sql server截取某个特定字符前,特定字符后,特定字符之间的字符串

怎么分别截取第一个”—“之前的数,第二个”—“之后的数和两个”—“之间的数啊
注意我是sql server的

img

截取第一个”—“之前的数,我百度到的是这样的,可以用,但是第二个”—“之后的数和两个”—“之间的数这俩不会截取,截取的都不太对

select  left(adress,charindex('-',adress)-1) from aaa where charindex('-',adress)-1 > 0

  • 写回答

1条回答 默认 最新

  • 孟意昶 2022-11-14 20:14
    关注

    可以直接试一下这段逻辑,运气好的话,可以直接满足需求,如果和预期有出入,可以接着往下看每一步的解析,主要我这边没有sql server的环境,没法进行测试,所以只能凭借对这些函数的理解写一段逻辑,所以这里可能会出现一些不准确的地方,您可以在自己理解后尝试改一改逻辑,基本框架应该就是这样

    select substr(adress,1,CHARINDEX('-',adress,1)), --第一个”—“之前的数
    substr(adress,CHARINDEX('-',adress,1),CHARINDEX('-',adress,CHARINDEX('-',adress,1)+1)),--两个”—“之间的数
    substr(adress,CHARINDEX('-',adress,CHARINDEX('-',adress,1)+1),-1) --第二个”—“之后的数
    

    首先需要了解的是substr和CHARINDEX两个函数,substr是对一个字段,截取指定位数之间的字符,比如substr(adress,1,2)就是从第1位开始,截取2位字符,CHARINDEX函数是对一个字符找到指定字符所在的位置,比如CHARINDEX('-',adress,1)就表示在adress这个字段里,从第1位开始找,第一个'-'会在第几位出现,也就是说这个函数会返回一个数字,所以您的这个需求,就需要综合使用这两个函数。
    1.因为CHARINDEX('-',adress,1)这个表达式会返回第一个'-'出现的位置,所以substr(adress,1,CHARINDEX('-',adress,1))就会得到第一个”—“之前的数
    2.CHARINDEX('-',adress,CHARINDEX('-',adress,1)+1)是会返回第2个'-'出现的位置,所以substr(adress,CHARINDEX('-',adress,1),CHARINDEX('-',adress,CHARINDEX('-',adress,1)+1))就会得到两个”—“之间的数
    3.理解了1、2,那也就可以捋明白substr(adress,CHARINDEX('-',adress,CHARINDEX('-',adress,1)+1),-1)这一句会的到第二个”—“之后的数

    本回答被专家选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月29日
  • 专家已采纳回答 11月21日
  • 创建了问题 11月14日

悬赏问题

  • ¥20 python忆阻器数字识别
  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真