假设我在数据库中有以下(虚构)条目:
ABC-X123
ABC-XY56
XYZ-A12
OP-123
HJK098
在第一个数值之前获取值的最佳方法是什么,所以我会得到
ABC-X
ABC-XY
XYZ-A
OP-
HJK
我知道如何使用函数来完成它,但是我没有可用的选项,所以如果可行,它应该在SQL语句中完成。
答案 0 :(得分:3)
使用case和patindex应该可以工作:
MS SQL Server 2008架构设置:
create table t (str varchar(50))
insert t values
('ABC-X123'),
('ABC-XY56'),
('XYZ-A12'),
('OP-123'),
('HJK098')
查询1 :
select
case patindex('%[0-9]%', str)
when 0 then str
else left(str, patindex('%[0-9]%', str) -1 )
end
from t
<强> Results 强>:
| COLUMN_0 |
|----------|
| ABC-X |
| ABC-XY |
| XYZ-A |
| OP- |
| HJK |
答案 1 :(得分:2)
您可以使用patindex()
:
select left(col, patindex('%[^0-9][0-9]%' , col))
如果列可能没有数字:
select (case when col like '%[^0-9][0-9]%' then left(col, patindex('%[^0-9][0-9]%', col))
else col
end)