Sql server 获取未以特定单词结尾的记录

Sql server 获取未以特定单词结尾的记录,sql-server,tsql,parsing,filter,Sql Server,Tsql,Parsing,Filter,我有一个带有值的字段,例如: 323.12.444.1 55.1231 4543.432.431 6.1 456.3234.54353.1124.1 321.3.425 2.3.1 5345.43.1 432.5646.2 因此,必须收集以.1结尾的记录。查询应该是什么?这应该比LIKE更快 select * from table where fieldname like '%.1' 如果可能的话,应该避免使用开头带有%的LIKE…这应该比LIKE快 如果可能的话,我们应该避免在开头加上%的

我有一个带有值的字段,例如:

323.12.444.1
55.1231
4543.432.431
6.1
456.3234.54353.1124.1
321.3.425
2.3.1
5345.43.1
432.5646.2

因此,必须收集以.1结尾的记录。查询应该是什么?

这应该比LIKE更快

select * from table where fieldname like '%.1'

如果可能的话,应该避免使用开头带有%的LIKE…

这应该比LIKE快


如果可能的话,我们应该避免在开头加上%的LIKE…

我建议使用这个:

SELECT *
FROM YourTable
WHERE REVERSE(SUBSTRING(REVERSE(col1),1,CHARINDEX('.',REVERSE(col1))-1)) = '1'
您可以找到所需的任何字符串,而无需更改查询中的参数:

;WITH YourTable AS (
SELECT *
FROM (VALUES
('323.12.444.1'),
('55.1231'),
('4543.432.431'),
('6.1'),
('456.3234.54353.1124.1'),
('321.3.425'),
('2.3.1'),
('5345.43.1'),
('432.5646.2')
) as t(col1)
)

SELECT *
FROM YourTable
WHERE REVERSE(SUBSTRING(REVERSE(col1),1,CHARINDEX('.',REVERSE(col1))-1)) = '431'
输出:

4543.432.431

我建议使用以下方法:

SELECT *
FROM YourTable
WHERE REVERSE(SUBSTRING(REVERSE(col1),1,CHARINDEX('.',REVERSE(col1))-1)) = '1'
您可以找到所需的任何字符串,而无需更改查询中的参数:

;WITH YourTable AS (
SELECT *
FROM (VALUES
('323.12.444.1'),
('55.1231'),
('4543.432.431'),
('6.1'),
('456.3234.54353.1124.1'),
('321.3.425'),
('2.3.1'),
('5345.43.1'),
('432.5646.2')
) as t(col1)
)

SELECT *
FROM YourTable
WHERE REVERSE(SUBSTRING(REVERSE(col1),1,CHARINDEX('.',REVERSE(col1))-1)) = '431'
输出:

4543.432.431

我必须承认:我做了一些测试,发现有了索引列,这样的速度更快。。。以后必须用这个做一些测试。。。如果没有索引,这两种方法是完全相同的…我必须承认:我做了一些测试,发现使用索引列,这两种方法速度更快。。。以后必须用这个做一些测试。。。如果没有索引,这两种方法是完全相同的。。。