CHARINDEX 在搜索文本列中的空格时始终返回 0


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

从这个字符索引中得到的只是 0,我尝试了 ' ' 而不是 char(32(。我尝试将文本更改为 varchar,但据我所知,这毫无意义,因为文本已被弃用并且已经被视为 varchar?

当我将userDetails部分复制并粘贴到单个带引号的字符串中并将其放入charindex函数中时,事情会按预期工作。

填充@userDetails的源文本如下所示:

键=值键=值键=值 键

=值

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

正如评论中@PhilipKelley提到的,

列之间的移动将转换为 [制表符] 字符...

现在搜索 char(13( 或回车允许我找到每个键=值对之间的字符。它还解释了为什么有 2 个空格,这些是写入此数据的程序用来分解每个条目的 CRLF

@Dems,提醒我

"空白"涵盖选项卡、回车符和许多其他实体,

在另一个讨论中也讨论了本网站上的类似主题

userDetailsIndex=patindex('% %', userDetails(

最新更新