--get text target starting integers into a table
declare @target TABLE([USERID] varchar(25),[target] int)
--get text stopping point integers into a table
declare @stop TABLE([USERID] varchar(25),[target] int, [stop] int)
--get just the options I want into a table
declare @options TABLE ([USERID] varchar(25), [userDetails] text)
insert into @options ([userid], [userDetails])
select u.userid, rtrim(ltrim(SUBSTRING([userDetails], s.[target], s.[stop] - s.[target])))
from users u join @stop s on u.userid = s.userid
declare @userDetails varchar(max)
Select top 1
@userDetails = [userDetails]
from @options
select charindex(char(32), @userDetails)
我从这个charindex获得的是0,我试过''而不是char(32)。 我已经尝试将文本更改为varchar但是从我可以看到的内容是没有意义的,因为文本已被弃用并且已被视为varchar?
当我将userDetails片段复制并粘贴到一个带引号的字符串中并将其放入charindex函数时,事情按预期工作。
填满@userDetails的源文本如下所示:
key = value key = value key = value
答案 0 :(得分:3)
切换到SSMS中的“结果到文本”,以查看实际输出的内容。如果您处于“结果到网格”中,则CRLF将转换为空格。
正如@PhilipKelley在评论中提到的那样,
列之间的移动会转换为[tab] characters ...
现在搜索char(13)或Carriage Return可以找到每个Key = Value对之间的字符。它还解释了为什么有2个空格,这些是写这个数据的程序用来分解每个条目的CRLF
@Dems,提醒我
“白色空间”涵盖制表符,回车以及许多其他实体,
此网站还在another discussion
中讨论了类似主题答案 1 :(得分:0)
userDetailsIndex = patindex(' %%',userDetails)