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

时间:2014-09-23 12:12:03

标签: sql sql-server tsql

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

ABC-X123
ABC-XY56
XYZ-A12
OP-123
HJK098

在第一个数值之前获取值的最佳方法是什么,所以我会得到

ABC-X
ABC-XY
XYZ-A
OP-
HJK

我知道如何使用函数来完成它,但是我没有可用的选项,所以如果可行,它应该在SQL语句中完成。

2 个答案:

答案 0 :(得分:3)

使用case和patindex应该可以工作:

SQL Fiddle

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)