【发布时间】:2023-03-26 10:17:01
【问题描述】:
我有一个奇怪的问题,过去几个小时我一直在摸索。
我有一个比较简单的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 以防万一。
什么可能阻止我的所有行返回?
【问题讨论】:
-
LIKE 'M%'应该完全可以工作。当您执行LIKE '%M%' 时会发生什么?只是出于好奇。 -
将不匹配的 M% 行转换为 varbinary 并查看前导值以确保第一个字节是 0x4d,而不是 unicode 工件(例如复制/粘贴)
-
@Ian 你所有的行或你所有的
'M'行?? -
如果您的列是 NVARHA 类型,请改用
N'M%'。这可能是一个排序规则或 unicode 问题,就像我曾经遇到的数字以及正方形和立方体符号
标签: sql sql-server tsql where-clause sql-like