不用CASE WHEN ...,有辦法嗎

N_chow 2002-08-29 12:13:23
DECLARE @csdn TABLE (Item NVARCHAR(40))
INSERT INTO @csdn VALUES ('BDN001')
INSERT INTO @csdn VALUES ('BDN002,TW002')
INSERT INTO @csdn VALUES ('BDN003[1]')
INSERT INTO @csdn VALUES ('BDN004,TW002[1]')
INSERT INTO @csdn VALUES ('BDN005[2],TS005[1],CY002,LD[22]')

要求把@csdn.Item欄位update成這樣:
BDN001
BDN002
BDN003
BDN004
BDN005
征求一種最簡潔最高效的方法。謝謝。

...全文
84 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
Chiff 2002-08-29
  • 打赏
  • 举报
回复
出丑了,sql没有这样的用法 select min(3,5) --3
:)
gzhughie 2002-08-29
  • 打赏
  • 举报
回复
UPDATE @Dcsdn SET Item =SUBSTRING('BDN',CHARINDEX('BDN',Item ),6)
saucer 2002-08-29
  • 打赏
  • 举报
回复
try

update @csdn set item = substring(item,1, patindex('%[^a-z0-9]%', item+',')-1)
N_chow 2002-08-29
  • 打赏
  • 举报
回复
看還有沒有其它方法:)

to Chiff(~o~):
你上面的例子,結果要求為:
abc[af] --->abc
abc[af],sdf --->abc
abc,sdf[sd] --->abc
abc,sdf --->abc
j9988 2002-08-29
  • 打赏
  • 举报
回复
老纳的方法好,只要替换“[”一“,”
j9988 2002-08-29
  • 打赏
  • 举报
回复
N_chow(一劍飄香) :
还不是向你学的!
Chiff 2002-08-29
  • 打赏
  • 举报
回复
可能我误会了。
请列出下列你要的结果集:

abc[af]
abc[af],sdf
abc,sdf[sd]
abc,sdf
N_chow 2002-08-29
  • 打赏
  • 举报
回复
to.j9988(j9988)
搞掟了。3Q...
j9988 2002-08-29
  • 打赏
  • 举报
回复
update @csdn set item=left(item,charindex('*',replace(replace(item+'*',',','*'),'[','*'))-1)
蓝天 2002-08-29
  • 打赏
  • 举报
回复
把[替换为,再取,左边的
j9988 2002-08-29
  • 打赏
  • 举报
回复
update @csdn set item=substring(item,1,charindex('*',replace(replace(item+'*',',','*'),'[','*'))-1)
N_chow 2002-08-29
  • 打赏
  • 举报
回复
Chiff(~o~)
語句不對,修改過結果也不正確。
Chiff 2002-08-29
  • 打赏
  • 举报
回复
select
left(@csdn,
min(charindex('[',@csdn+'['), charindex(',',@csdn+',')) - 1
)
N_chow 2002-08-29
  • 打赏
  • 举报
回复
j9988大哥,你看我的第二個回複,左邊的字符是無規則的。
>>>

左邊字符個數不固定,即有可能是
BDN002,TW002
也有可能是
TY0,TS[2]
CY2236,LL9
LS[22],LG008
....
j9988 2002-08-29
  • 打赏
  • 举报
回复

declare @i int
set @i=0
update @csdn set item='bdn'+right('000'+cast(@i as varchar(3)),3),@i=@i+1
N_chow 2002-08-29
  • 打赏
  • 举报
回复
海兄,
不是那樣。
取字串的規則:
若字串中含有","號,則先取第一個","號左邊的字串,然後再判斷是否還再含有[]符號,若有,則取"["號左邊的字符。
IF 含有","號 THEN
LEFT(字串,","左邊的字串)
IF 字串含有"[]"號, THEN
LEFT (字串,"["左邊的字符
ELSE
取左邊的字符
END IF
ELSE
取左邊的字符
END
ELSE
取左邊的字符
END IF

N_chow 2002-08-29
  • 打赏
  • 举报
回复
左邊字符個數不固定,即有可能是
BDN002,TW002
也有可能是
TY0,TS[2]
CY2236,LL9
LS[22],LG008
....
Yang_ 2002-08-29
  • 打赏
  • 举报
回复
update @csdn
set Item =left(Item,6)

时这样吗??!!

N_chow 2002-08-29
  • 打赏
  • 举报
回复
呵呵,good.
結帖啦。
Yang_ 2002-08-29
  • 打赏
  • 举报
回复
update @csdn set item=left(item,charindex(',',replace(item+',','[',',')-1)

加载更多回复(3)

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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