如何使用 TSQL 获取第一个数值之前的子字符串?

Wok*_*man 2 sql t-sql sql-server

假设我的数据库中有以下(虚构的)条目:

ABC-X123
ABC-XY56
XYZ-A12
OP-123
HJK098
Run Code Online (Sandbox Code Playgroud)

获取第一个数值之前的值的最佳方法是什么,这样我就会得到

ABC-X
ABC-XY
XYZ-A
OP-
HJK
Run Code Online (Sandbox Code Playgroud)

我知道如何使用函数来完成此操作,但我没有可用的选项,因此如果可行,应该在 SQL 语句中完成。

jpw*_*jpw 5

使用 case 和 patindex 应该有效:

SQL小提琴

MS SQL Server 2008 架构设置

create table t (str varchar(50))
insert t values 
('ABC-X123'),
('ABC-XY56'),
('XYZ-A12'),
('OP-123'),
('HJK098')
Run Code Online (Sandbox Code Playgroud)

查询1

select 
case patindex('%[0-9]%', str)
    when 0 then str
    else left(str, patindex('%[0-9]%', str) -1 ) 
end
from t
Run Code Online (Sandbox Code Playgroud)

结果

| COLUMN_0 |
|----------|
|    ABC-X |
|   ABC-XY |
|    XYZ-A |
|      OP- |
|      HJK |
Run Code Online (Sandbox Code Playgroud)