SQL Server反向包含
我不确定这是否可能,我完全不确定如何正确地问这个问题,但我会尝试一下 我使用的是SQLServer2008R2,有一个数据库列包含值“1000”。 现在我将从一个接口获得以下值:“100023” 现在我想编写一个SQL Server查询,在这里我可以使用SQL Server反向包含,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我不确定这是否可能,我完全不确定如何正确地问这个问题,但我会尝试一下 我使用的是SQLServer2008R2,有一个数据库列包含值“1000”。 现在我将从一个接口获得以下值:“100023” 现在我想编写一个SQL Server查询,在这里我可以使用100023并找到包含1000的行。因此,我不想使用CONTAINS和1000来查找100023,而是相反。我想这样做,因为接口也会返回像100024、100025、100025这样的值,但我总是想得到包含1000的行。遗憾的是,我无法更改接口的
100023
并找到包含1000的行。因此,我不想使用CONTAINS
和1000来查找100023,而是相反。我想这样做,因为接口也会返回像100024、100025、100025这样的值,但我总是想得到包含1000的行。遗憾的是,我无法更改接口的返回值,也无法将最后两位数字切掉
我不确定,这在逻辑上是否合理,但也许有人能帮我
提前谢谢 您可以像使用
一样使用:
DECLARE @param varchar(10)
SET @param = '100023'
SELECT Value
FROM dbo.TableName
WHERE @param LIKE '%' + Value + '%'
如果我正确理解了您的要求。下面的查询将获得您正在查找的行,而不实际更改输入参数(当然,也不保留对输入参数的任何更改)。如果您能够在查询之前的操作中进行更改,那么您将获得sargable equality子句的全部好处,从而获得一个很好的索引查找
DECLARE @param varchar(10)
SET @param = '100023'
declare @testTable table(num int, described_as varchar(100))
insert into @testTable values
( 1000, 'The number one thousand'),
( 2000, 'The number two thousand')
SELECT *
FROM @testTable
WHERE num = FLOOR( ROUND(@param, -2)) / 100
如果没有,请尝试重新表述您的文本,以便社区能够更好地理解您的要求。:) 所以参数是100023
(varchar),您想查找所有作为子字符串的记录吗?您如何调用查询?如果你可以执行任意的查询,为什么不能把这两个字符删掉呢?我感觉到了矛盾。值100024和100025包含1000,但您说您不需要它们。因为值以1000开头不会像值+'%'
那样更准确吗?@EvertonAgner:但他想要的是的“oposite”,并且还提到:“包含1000的行”不是以1000开头的行。据我所知,这个问题,他想查询100023
,100024
,100025
等,并且总是找到1000
@EvertonAgner:如果你看一下,你会发现他总是找到1000。好的,但是如果你查询999100023
,它就是在查找1000
。不管怎么说,警长必须检查这是否是他想要的。。。这句话让我感到困扰:很遗憾,我无法更改接口的返回值,也无法将最后两位数字切掉