【发布时间】:2021-02-23 06:22:12
【问题描述】:
如果我们有一个如下所示的查询,CHARINDEX 应该在给定列中找到字符串的索引,但结果与预期不符。有没有其他方法可以检索索引?
SELECT t.*, CHARINDEX('text', CAST([col] AS varchar)) AS [out]
FROM (
SELECT CAST([col] AS NVARCHAR(4000)) AS [col]
FROM (
VALUES ('"http:\/\/xxxxx.share.com\/text"'),
('random content in string :\/\\//\ / text \\\''''''')
) AS t0([col])
) t
结果是
col | out
"http:\/\/xxxxx.share.com\/text" | 0
random content in string :\/\\//\ / text \\\'''''' | 0
但如果我期望输出是这样的
col | out
"http:\/\/xxxxx.share.com\/text" | 28
random content in string :\/\\//\ / text \\\'''''' | 36
由于 text 字符在行中分别为 28/36,在这种情况下我们如何获取索引位置?
【问题讨论】:
-
CAST([col] AS varchar))必须是CAST([col] AS varchar(max)))- 您必须始终指定varchar或nvarchar的长度。
标签: sql sql-server charindex