【发布时间】:2014-10-09 10:36:42
【问题描述】:
所以我在 SQL 中有一个这样的字符串
Declare @Denumire varchar(2000) = '''Name''name(109)'',''name (1921)'',''name name name name name (2312)'',''name name name name name (2358)'''
我想要的是检索每个 Name 的每个代码。
在这个例子中是
109,1921,2312,2358
我设法使用查询获得了最后一个代码 2358。
Declare @Cod varchar(20)
Declare @test varchar(3000)
declare @CoduriFinale varchar(2000)
Declare @rDenumire varchar(3000) = REVERSE(@Denumire)
SELECT @Cod = LEFT(@rDenumire,CHARINDEX ( ' ' ,@rDenumire , 0))
SELECT @Cod = REPLACE (@Cod , '(' , '' )
SELECT @Cod = REPLACE (@Cod , ')' , '' )
set @CoduriFinale = REVERSE(RTRIM(LTRIM(SUBSTRING(@Cod,2,6))))+','
set @test = SUBSTRING(@rDenumire,CHARINDEX (',',@rDenumire, 0),LEN(@rDenumire))
set @rDenumire = @test
print @CoduriFinale
print @test
所以我在这里所做的是反转孔字符串(这将确保第一个单词)直到 ' ' 是我的代码,因为我无法让它在 while 循环中为孔执行此操作字符串。
PS:我的字符串实际上是更多用逗号分隔的字符串。
【问题讨论】:
-
T-SQL 在字符串操作方面很糟糕,将数据传递给客户端然后使用正则表达式提取数据会更容易。当然,最好在将非规范化数据存储到数据库之前进行解析。如果您担心表的列过多,可以使用sparse columns 存储数百列而影响最小
标签: sql sql-server tsql substring