首页 > 解决方案 > SQL server WHERE 在具有文本前缀/后缀的数字之间

问题描述

我需要返回具有一系列序列号但需要删除前缀和后缀的匹配项

IE。我需要在下面的序列号之间进行搜索,但序列号只是中间部分。

G4A41103801702 - G4A41113171702

G4A [4110380] 1702 - G4A [4111317] 1702

我需要排除前 3 位和后 4 位数字,然后在 4110380-4111317 之间搜索

谢谢

标签: sqlsql-servertsqlsubstring

解决方案


接力棒,尝试以下查询的变体:

替换id为您要选择的列。

替换tablename为您的实际表名。

Assumesserialnumber是要查询的序列号的列的名称。

假设序列号的长度是恒定的。

SELECT id FROM tablename WHERE
CAST(SUBSTRING(serialnumber, 4, 7) as int) >= 4110380 AND
CAST(SUBSTRING(serialnumber, 4, 7) as int) <= 4111317

正如@ADyson 提到的,这不会使用索引,您应该将此数字提取到单独的索引列中,以获得更高性能的查询。希望这可以帮助!


推荐阅读