在搜索TEXT列中的空格时,CHARINDEX始终返回0

时间:2012-02-21 20:12:27

标签: sql sql-server tsql sql-server-2008-r2

--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

2 个答案:

答案 0 :(得分:3)

切换到SSMS中的“结果到文本”,以查看实际输出的内容。如果您处于“结果到网格”中,则CRLF将转换为空格。

正如@PhilipKelley在评论中提到的那样,

  

列之间的移动会转换为[tab] characters ...

现在搜索char(13)或Carriage Return可以找到每个Key = Value对之间的字符。它还解释了为什么有2个空格,这些是写这个数据的程序用来分解每个条目的CRLF

@Dems,提醒我

  

“白色空间”涵盖制表符,回车以及许多其他实体,

此网站还在another discussion

中讨论了类似主题

答案 1 :(得分:0)

userDetailsIndex = patindex(' %%',userDetails)