string - 在T-SQL中获取字符串的特定部分

标签 string sql-server-2008 t-sql

我有一个像 prop234 这样的字符串,字母部分具有固定长度,但数字部分可以是任意长度

我必须从 T-SQL 中的字符串中获取数字部分(在 SQL Server 2008 上)

我尝试使用SUBSTRING函数,但我不知道数字部分的长度,因此无法提供第三个参数,即长度

SUBSTRING ( expression ,start , length )

我知道起始索引,但长度可以是任何内容

一种解决方案是

SELECT substring([ColumnName], 5, LEN(ColumnName) - 4)

因为起始索引是固定的,即字母部分的长度是4(固定)

是否有更好的解决方案?如果字母部分的长度不恒定怎么办?

最佳答案

select stuff('prop234', 1,4,'')

如果长度不是常数:

declare @t table(expression varchar(100))
insert @t values('propprop234')

select stuff(expression, 1, patindex('%_[0-9]%', expression), '') from @t

编辑:为了确保处理错误数据,例如前面没有文本或最后没有数字,这里有一个稍微不同的方法:

select stuff(expression, 1,patindex('%[^0-9][0-9]%', expression + '0'), '') 
from @t 

关于string - 在T-SQL中获取字符串的特定部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11132734/

相关文章:

java - 删除电子邮件地址中的无效字符

sql-server - 可以设置T-SQL变量的排序规则吗?

sql - 在 1 :n foreign key relationship 上选择条件为 "at least one"的记录

用于将字符串放在括号中的 Ruby 函数

javascript - 类型错误:字符串不是函数

sql - 加入 100 个表

sql - TSQL - 通过智能减少记录数量 - 模式(崩溃影响数据)

sql-server-2008 - 将派生表与自身连接

sql-server - 为新表插入行,涵盖 TableA 和 TableB 中 ID 列的组合

regex - 匹配正则表达式中的单个反斜杠