SQL Server 2008帮助 - 查找常量+主键

时间:2016-05-23 19:22:23

标签: sql-server-2008

使用SQL Server 2008数据库,我试图在B列中找到与常量数据+主键不匹配的行。主键是A列 这是一个示例,我正在寻找一个将从此表中检索第3行的SQL语句:

行xxx A列 B列
第1行 123 od123
第2行 124 od124
第3行 125 od789
第4行 126 od126

别名表并进行比较?创建一个视图?有没有办法使用连接?

提前致谢

1 个答案:

答案 0 :(得分:0)

用你正在使用的任何列名替换我的变量......

declare @columna varchar(20)
set @columna = '125'
declare @columnb varchar(20)
set @columnb = 'od789'
select len(@columnb) - len(replace(@columnb,@columna,''))

如果select len(@columnb) - len(replace(@columnb,@columna,'')) = 0的结果,您可以获取结果(意味着它不存在于字符串中)。然而,如果结果> 0,你不想挑选它,例如,使用你的数据:

declare @columna varchar(20)
set @columna = '123'
declare @columnb varchar(20)
set @columnb = 'od123'
select len(@columnb) - len(replace(@columnb,@columna,''))

将返回3.

更通用的解决方案可能是:

SELECT <enter your columns that you want to return here> FROM YourTable WHERE len(columnb) - len(replace(columnb,columna,''))=0

这里的想法是,如果没有替换要做,你最终会从原始字符串中减去原始字符串(列b)的长度(再次列b,因为没有任何改变),这是你的数据想要返回(WHERE ... = 0)。

另一方面,如果在字符串中进行替换,则最终获得正长度(即使字符串是精确的,尝试使用od123和od123),这反过来应该从结果集中丢弃。这就是我使用= 0过滤where条件的原因。