SQL WHERE Like 子句不返回所有结果

标签 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 行结果,如 - 完美

[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 进行了尝试。

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

最佳答案

使用 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 

关于SQL WHERE Like 子句不返回所有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47334043/

相关文章:

mysql - 检查两个表中的匹配记录

2018年MYSQL日期计算

sql - 使用 Merge 语句到触发器中

c# - SQL Server/Entity Framework - 如何按随机数排序然后在以后重现结果?

sql-server - 如何从 SSIS 执行存储过程以将其输出到文本文件

sql - TSQL:获取最后运行的查询

MySQL - 唯一索引必须包含表分区函数中的所有列

sql - T-SQL - 更新未更改的值,是否已执行工作?

sql - 什么时候应该使用 CROSS APPLY 而不是 INNER JOIN?

sql - 数据透视中的 2 个不同聚合