mysql5资源共享

 找回密码
 立即注册
查看: 58|回复: 4

[MS-SQL Server] 【疑难】sql查询如何去掉中括号

[复制链接]

1

主题

1

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2019-7-15 14:09:17 | 显示全部楼层 |阅读模式
sql查询结果返回的字段值,有的有一个中括号,有的有两个中括号,如果在查询语句里面把中括号和中括号里面的值全部去掉,比如abcdef[g]替换成abcdef,吧[a]bcdef[g]替换成bcdef,一个中括号的我改好了,没问题,但是如果存在两个中括号,就返回NULL了,有没有一种通用的方式,这两种情况都适用的。跪求大神指教。
回复

使用道具 举报

0

主题

202

帖子

420

积分

中级会员

Rank: 3Rank: 3

积分
420
发表于 2019-7-15 15:28:33 | 显示全部楼层


  1. DECLARE@AVARCHAR(100)

  2. SET@A='z[p]z9[5][86]0[123]'

  3. ;WITHCTE_1
  4. AS
  5. (SELECTA.NUMBERASSTART_NUM,B.*,C.NUMBERASEND_NUM,
  6. ROW_NUMBER()OVER(PARTITIONBYTORDERBYA.NUMBER)ASSEQ,
  7. COUNT(1)OVER(PARTITIONBYT)ASQTY
  8. FROMMASTER.DBO.SPT_VALUESA
  9. JOIN(SELECT@AAST)ASBONCHARINDEX('[',B.T,NUMBER)=NUMBER
  10. JOINMASTER.DBO.SPT_VALUESCONCHARINDEX(']',B.T,A.NUMBER)=C.NUMBER
  11. WHEREA.TYPE='P'ANDC.TYPE='P'),

  12. CTE_2
  13. AS
  14. (SELECTA.T,
  15. CASEWHENA.SEQ=1ANDA.START_NUM1THENSUBSTRING(A.T,1,A.START_NUM-1)ELSE''END+
  16. CASEWHENA.SEQ=A.QTYTHENSUBSTRING(A.T,A.END_NUM+1,LEN(A.T))ELSESUBSTRING(A.T,A.END_NUM+1,B.START_NUM-A.END_NUM-1)ENDASSTRING,
  17. A.START_NUM
  18. FROMCTE_1A
  19. LEFTJOINCTE_1BONA.SEQ=B.SEQ-1)


  20. SELECTDISTINCTT,(SELECT''+STRINGFROMCTE_2FORXMLPATH(''))
  21. FROMCTE_2
复制代码
回复

使用道具 举报

1

主题

27

帖子

65

积分

注册会员

Rank: 2

积分
65
发表于 2019-7-15 15:45:38 | 显示全部楼层


  1. --如果可以操作正则表达式
  2. selectdbo.Reg_Replace('[a1]bcdef[g]','\[.+?\]','')

  3. --否则
  4. DECLARE@AVARCHAR(100)

  5. SET@A='[a1]bcdef[g]'
  6. ;withct
  7. as
  8. (
  9.         selectconvert(varchar(max),@A)asx,1asy
  10.         unionall
  11.         selectSTUFF(x,CHARINDEX('[',x),CHARINDEX(']',x)-CHARINDEX('[',x)+1,''),y+1fromctwhere
  12.         CHARINDEX('[',x)>0andCHARINDEX(']',x)>0
  13. )
  14. selecttop1*fromct
  15. orderbyydesc


复制代码
回复

使用道具 举报

7

主题

531

帖子

1089

积分

金牌会员

Rank: 6Rank: 6

积分
1089
发表于 2019-7-15 16:37:04 | 显示全部楼层

  1. createtable#t(xvarchar(50))

  2. insertinto#t(x)
  3. select'abcdef[g]'unionall
  4. select'[a]bcdef[g]'


  5. --更新
  6. while(exists(select1
  7. from#t
  8. wherecharindex('[',x)>0andcharindex(']',x,charindex('[',x))>0))
  9. begin
  10. update#t
  11. setx=substring(x,1,charindex('[',x)-1)+substring(x,charindex(']',x,charindex('[',x))+1,1000)
  12. wherecharindex('[',x)>0andcharindex(']',x,charindex('[',x))>0
  13. end


  14. --结果
  15. select*from#t

  16. /*
  17. x
  18. --------------------------------------------------
  19. abcdef
  20. bcdef

  21. (2行受影响)
  22. */
复制代码
回复

使用道具 举报

36

主题

2968

帖子

6024

积分

论坛元老

Rank: 8Rank: 8

积分
6024
发表于 2019-7-15 16:51:50 | 显示全部楼层


  1. [2[354]]
  2. 12[555[x]

  3. --这样的数据,怎么处理

复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|mysql5.com Inc. ( 闽ICP备17002856号-1 )

GMT+8, 2019-10-22 07:15 , Processed in 0.044517 second(s), 18 queries .

Powered by MySQL5.com X3.4

© 2003-2019 MySQL5.com.

快速回复 返回顶部 返回列表