我们在这里使用 charindex 来搜索一个字符串,如下所示
SELECT *
FROM tablename
WHERE ( Charindex('47a%$.abc',CAST(columnname AS VARCHAR(MAX)))>0 )
Run Code Online (Sandbox Code Playgroud)
我打算用 LIKE 替换 charindex,因为我只需要搜索模式是否存在而不是位置。所以我想知道在我的情况下使用 LIKE 而不是 charindex 有什么缺点。我在几种情况下使用 charindex。所以我希望它适用于所有 sql 数据类型,包括特殊字符在内的所有字符(包括 %(就像已经使用了 %pattern%)。所以请告诉我使用 like 超过 charindex 有什么缺点
我有一个如下所示的 SQL 代码:
declare @str nvarchar(max),@i int
set @i=0
set @str='abc '
declare @tbl Table(a nvarchar(max))
insert @tbl select @str
while (select a from @tbl)<>''
begin
set @i=@i+1
set @str = substring(@str,2,len(@str))
update @tbl set a=@str
select * from @tbl
end
Run Code Online (Sandbox Code Playgroud)
这里@str有值'abc '(末尾有空格)。执行上述查询时,当'a'. 此查询的输出还包括:
bc
c
<here blank>
Run Code Online (Sandbox Code Playgroud)
对于上面的查询,如果我给出输入@str,'abcd'
那么输出将是
bcd
cd
d
<here blank>
Run Code Online (Sandbox Code Playgroud)
所以在第一种情况下,@str='abc '我想得到像
bc
c
<here blank>
<here blank>
Run Code Online (Sandbox Code Playgroud)
现在代码正在检查空间,因此我遇到了问题。但我希望它也考虑到最后的空间。
同样是 SQL 中的问题len()。双方 …
我有一个查询,如下所示。
DECLARE @tbl TABLE
(
id INT,
col XML
)
INSERT INTO @tbl
VALUES
(1,'<Root>
<Row>
<User>xyz</User>
<Rowid>1</Rowid>
</Row>
<Maxrowid>1</Maxrowid>
</Root>'),
(2,'<Root>
<Row>
<User>xyz</User>
<Rowid>1</Rowid>
</Row>
<Row>
<User>mnj</User>
<Rowid>2</Rowid>
</Row>
<Maxrowid>2</Maxrowid>
</Root>'),(3,'<Root>
<Row>
<User>abs</User>
<Rowid>1</Rowid>
</Row>
<Row>
<User>xra</User>
<Rowid>2</Rowid>
</Row>
<Maxrowid>2</Maxrowid>
</Root>
')
--table before---
SELECT *
FROM @tbl t1
------------------
DECLARE @id varchar
SELECT @id = 'xyz'
SELECT *
FROM @tbl t1
WHERE col.exist('//*/text()[contains(.,sql:variable("@id"))]') = 1
Run Code Online (Sandbox Code Playgroud)
我期待这个查询输出在 xml 列 'col' 中任何地方都有 'xyz' 的行。但它返回所有行。(当我检查它返回所有在 xml 列中包含“x”的行。所以请告诉我为什么会发生?我哪里出错了?还请纠正它。
此外,我还有另一个问题,即对上面相同的 xml 的以下查询不返回任何输出。我希望它返回 xml …
比较查询性能时应该检查哪些因素?
我看到很多关于 IO 成本、子树成本(通过使用执行计划)、CPU 时间、运行时间(通过使用 set statistics time on)、运行查询所需的时间等统计信息的文章。
我见过一些具有高子树成本但执行速度快的查询。所以我想知道在检查查询性能时我必须考虑哪些因素。