SQL WHERE Like Clause不返回所有结果

时间:2017-11-16 15:57:47

标签: sql sql-server tsql where-clause sql-like

我有一个奇怪的事情,过去几个小时我一直在摸不着头脑。

我有一个相对简单的TSQL

SELECT 
  LTRIM(RTRIM(bom_comp_code)) [bom_comp_code]
  , bom_product                 
  , bom.actual_partnumber           
FROM 
  dbo.MRP_ALL bom 
WHERE               
  bom.bom_product = 'F00434' 

这会返回500行结果,例如 - perfect

[bom_comp_code]  [bom_product]  [actual_partnumber]
M03275           F00434         99292922            
M03275           F00434         99292922            
B01869           F00434         99292922            
B01869           F00434         99292922            
M03275           F00434         99292922            
M03275           F00434         99292922            
B01869           F00434         99292922            
...      
...
B01869           F00434         99292922            
B01869           F00434         99292922            
M03275           F00434         1110-011        
M03275           F00434         1110-011

现在我只对以M开头的bom_comp_code感兴趣,所以我自然会使用以下TSQL

SELECT 
  LTRIM(RTRIM(bom_comp_code)) [bom_comp_code]
  , bom_product                 
  , bom.actual_partnumber           
FROM 
  dbo.MRP_ALL bom 
WHERE               
  bom.bom_product = 'F00434' 
AND LTRIM(RTRIM(bom.bom_comp_code)) like 'M%'

但这只会返回一行!

[bom_comp_code]  [bom_product]  [actual_partnumber]
M03275           F00434         1110-011

我不能为我的生活理解当表中的224符合我的标准时,为什么只返回一行

LTRIM / RTRIM让我觉得bom_comp_code字段周围有空格,但这不起作用。

我也在bom_product周围试过这个以防万一。

有什么可能阻止我的所有行返回?

2 个答案:

答案 0 :(得分:1)

USE LEFT()

AND LEFT(bom_comp_code, 1) = 'M'

如果你真的有空格

AND LEFT(LTRIM(bom_comp_code), 1) = 'M'

要检查字符串开头是否有特殊字符,请按照

进行调试
SELECT LEFT(LTRIM(bom_comp_code), 1) as first_char,
       ASCII (LEFT(LTRIM(bom_comp_code), 1)) as ascii_number
       LTRIM(bom_comp_code)
FROM dbo.MRP_ALL bom 

答案 1 :(得分:0)

我遇到了类似的问题,我就像上面提到的“Juan Carlos Oropeza”一样有特殊的角色。

使用此回答https://stackoverflow.com/a/14211957/7141065中的函数,我能够更新相关列并在此之后正常运行查询。