sql - 如何检查值中的前一个或前两个或前三个字符是字母
问题描述
我有一个 IDNumber 列的表,其中包含所有数字或字母数字,其中第一个或前两个或前三个字符是字母。我想做的就是从该值中删除这些字母。
请注意,数据库位于 SQL Server 2000 中。
例如:
1430112345679 (This is OK)
PO02456977785 (Remove first two letters)
C035343542654 (Remove first letter)
QPD1236548 (Remove first three letters)
解决方案
这应该在任何受支持的 SQL Server 版本中执行您想要的操作:
select idNumber, stuff(idNumber, 1, patindex('%[0-9]%', idNumber) - 1, '')
这是一个 db<>fiddle。
在长期不受支持的 SQL Server 2000 中,您可以做一些更暴力的事情:
select (case when idNumber like '[0-9]%' then idNumber
when idNumber like '_[0-9]%' then substring(idNumber, 2, len(idNumber))
when idNumber like '__[0-9]%' then substring(idNumber, 3, len(idNumber))
when idNumber like '___[0-9]%' then substring(idNumber, 4, len(idNumber))
. . . -- however many clauses you need
end)
或使用LIKE
:
select (case when left(idNumber, 1) between '0' and '9' then idNumber
when substring(idNumber, 2, 1) between '0' and '9'
then substring(idNumber, 2, len(idNumber))
when substring(idNumber, 3, 1) between '0' and '9'
then substring(idNumber, 3, len(idNumber))
when substring(idNumber, 4, 1) between '0' and '9'
then substring(idNumber, 4, len(idNumber))
. . . -- however many clauses you need
end)
推荐阅读
- alloy - 合金pred声明:方括号和圆括号有区别吗?
- html - 从 API 请求 node.js 在 HTML 中设置图像
- arrays - 如何基于不在另一个数组中的值创建一个数组?
- c# - 如何将 cloudformation 模板 yaml 反序列化为 C# 字符串字典?
- angular - Angular OpenLayers 点击事件功能
- google-sheets - 需要为 Google 表格仪表板获取永久时间戳
- sql - 用 SQL 中的三个不同数据集比较和重叠时间范围
- mysql - 如何组合多个条件
- c++ - 为什么我不能从文件中读取一行
- algorithm - 具有锯齿形图案的二叉树