sql - SQL server WHERE 在具有文本前缀/后缀的数字之间
问题描述
我需要返回具有一系列序列号但需要删除前缀和后缀的匹配项
IE。我需要在下面的序列号之间进行搜索,但序列号只是中间部分。
G4A41103801702 - G4A41113171702
G4A [4110380] 1702 - G4A [4111317] 1702
我需要排除前 3 位和后 4 位数字,然后在 4110380-4111317 之间搜索
谢谢
解决方案
接力棒,尝试以下查询的变体:
替换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 提到的,这不会使用索引,您应该将此数字提取到单独的索引列中,以获得更高性能的查询。希望这可以帮助!
推荐阅读
- c# - 下载文件 Angular、.Net 5
- wordpress - 如何修改 Wordpress TinyMCE 编辑器中的链接按钮?
- c - strlen() 返回错误值
- sql-server - SQL Server 触发器将添加的列名从一个表插入到另一个表
- python - y.append(sum(x)) 通过将 x 数组的总和添加到 x 数组来修改 x 数组,我不知道为什么
- flutter - 在 Flutter 的 TextSpan 中查找“文本”的“长度”总和
- c++ - 如何将纹理映射到旧版 OpenGL 1.x 中的对象?
- linux - 如何逐行组合`stat`和`md5sum`输出?
- haskell - typclass 任务 Haskell 翻转和折叠
- java - ProxyOverrideError Apache tomact 9.0