使用SQL Server 2008数据库,我试图在B列中找到与常量数据+主键不匹配的行。主键是A列 这是一个示例,我正在寻找一个将从此表中检索第3行的SQL语句:
行xxx A列 B列
第1行 123 od123
第2行 124 od124
第3行 125 od789
第4行 126 od126
别名表并进行比较?创建一个视图?有没有办法使用连接?
提前致谢
答案 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条件的原因。