【问题标题】:Trim string based on characters根据字符修剪字符串
【发布时间】:2016-07-07 18:43:49
【问题描述】:

我有像

这样的字符串
WebApp - 10148

Smart - App - 1458

预期结果

WebApp

Smart - App

我想将字符从 - 修剪到右侧的数字。

我试过下面的查询,结果是这样的

select LEFT(app+' - ', CHARINDEX(' - ',app+' - ')-1) from repository

WebApp
Smart

谁能帮我解决这个问题?

【问题讨论】:

  • app 是包含文本的列的名称吗?

标签: sql sql-server sql-server-2008 tsql split


【解决方案1】:

只是为了好玩,一种使用递归 CTE 的方法(我会使用 Rahul 的答案 :-))

DECLARE @tbl TABLE(x VARCHAR(100));
INSERT INTO @tbl VALUES('WebApp - 10148'),('Smart - App - 1458');

WITH FindHyphens AS
(
    SELECT x,0 AS StartInx, PATINDEX('% - %',x) AS PosHyphen,SUBSTRING(x,PATINDEX('% - %',x)+1,1000) AS Subst FROM @tbl
    UNION ALL
    SELECT x,StartInx+PATINDEX('% - %',Subst),PATINDEX('% - %',Subst),SUBSTRING(Subst,PATINDEX('% - %',Subst)+1,1000)
    FROM FindHyphens
    WHERE PATINDEX('% - %',Subst)>0
)
,FindLastHyphen AS
(
    SELECT x, MAX(StartInx+PosHyphen)-1 AS LastPos
    FROM FindHyphens
    GROUP BY x
)
SELECT SUBSTRING(x,1,LastPos)
FROM FindLastHyphen

【讨论】:

    【解决方案2】:

    试试这个:

    reverse(right(reverse(@string), len(@string) - charindex('-',reverse(@string),1)));
    

    【讨论】:

    • 看起来很棒!我可以调整最后的连字符吗?
    • @Michael:- 更新了,现在你不会得到最后的连字符了。请立即检查!
    猜你喜欢
    • 2012-01-19
    • 2014-01-17
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多