Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL WHERE Like子句不返回所有结果_Sql_Sql Server_Tsql_Where Clause_Sql Like - Fatal编程技术网

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

SQL WHERE Like子句不返回所有结果,sql,sql-server,tsql,where-clause,sql-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行类

我有一个奇怪的问题,在过去的几个小时里我一直在挠头

我有一个相对简单的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_代码感兴趣,所以我自然会使用以下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_产品附近尝试过这个

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

使用
LEFT()

如果你真的有空间

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 

我也有类似的问题,我有一些特殊的角色,正如上面提到的“胡安·卡洛斯·奥罗佩扎”


使用这个答案中的函数,我可以更新有问题的列,然后正常运行查询。

像'M%'
应该完全可以工作。当您执行像“%M%”这样的
时会发生什么?出于好奇。将不匹配的M%行强制转换为varbinary,并查看前导值以确保第一个字节为0x4d,而不是unicode工件(例如复制/粘贴),如其他地方所述,修剪函数仅删除空格。您可以使用如下代码修剪其他空白字符:@Ian您的所有行或所有
'M'
行??如果您的列是NVARCHA类型,请改用
N'M%'
。这可能是一个排序或unicode问题,就像我曾经遇到的数字和正方形和立方体符号的问题一样。我想你已经给出了字符串位置。提供一种替代方法来做同样的事情并不能回答为什么这件事似乎对OP不起作用-也就是说,为什么
像'M%'
不能像预期的那样工作。@下划线\u d确定我的地址那个一开始可能是一个特殊的角色,这没有意义
LEFT()
的工作原理应该与
类似于M%
您可以转储一些数据,以便我们可以尝试重现该行为吗?是否定义了任何特殊的排序规则?如果无法复制,则说明系统存在问题。检查数据库或字段的排序规则。尝试创建数据库备份并安装到其他服务器中。导出DDL并在rextester上试用。
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