【发布时间】:2010-09-16 22:37:09
【问题描述】:
我从这个开始,但它是执行任务的最佳方式吗?
select
reverse(
substring(reverse(some_field),
charindex('-', reverse(some_field)) + 1,
len(some_field) - charindex('-', reverse(some_field))))
from SomeTable
- SQL Server 如何处理
多次调用
reverse(some_field)? - 除了 UDF 和迭代
寻找
charindex的字符串 '-' 并存储最后一个 它的索引,还有更多 在 T-SQL 中执行此任务的有效方法?
请注意,我所拥有的东西是有效的,我只是想知道这是否是最好的方法。
以下是 some_field 的一些示例值。
s2-st, s1-st, s3-st, s3-sss-zzz, s4-sss-zzzz
编辑:
此示例输出将是...
s1, s2, s3-sss, s3, s4-sss
ErikE 写的解决方案实际上是获取字符串的结尾,所以最后一个连字符之后的所有内容。我刚刚修改了他的版本以获取之前的所有内容,而不是使用left 函数的类似方法。感谢您的所有帮助。
select left(some_field, abs(charindex('-', reverse(some_field)) - len(some_field)))
from (select 's2-st' as some_field
union select 's1-st'
union select 's3-st'
union select 's3-sss-zzz'
union select 's4-sss-zzzz') as SomeTable
【问题讨论】:
标签: sql sql-server tsql sql-server-2000