仅从SQL删除字符

时间:2018-09-06 11:19:43

标签: sql sql-server tsql

我有一个SQL字符串,我需要删除最后一个字符(如果它只是一个A-Z),

  
    

原件:001-123456AB
    预期:123456

         

原件:001-123456
    预期:123456

  

在这里我得到123456部分。现在我需要如果此SQL字符串包含字符,则 需要删除

(SUBSTRING(GeoNews,0,CHARINDEX('-',GeoNews))

3 个答案:

答案 0 :(得分:3)

如果字母字符仅出现在字符串的末尾而不是中间,则可以执行以下操作:

select left(geonews, patindex('%[A-Z]%', geonews + 'A') - 1)

答案 1 :(得分:2)

您可以尝试以下方法:

select reverse(substring(geonews, patindex('%[0-9]%', geonews), len(geonews))) from (
    select reverse(substring(geonews, charindex('-', geonews, 1) + 1, LEN(geonews))) geonews
    from my_table
) a

它在连字符-之后参与,将其反转,现在“结束”字母将在开头。我们将删除它(使用substringpatindex,它们将返回字符串中第一个出现的数字),然后将字符串反转。

答案 2 :(得分:0)

尝试一下:

DECLARE @String VARCHAR(100)
SET @String = '001-123456AB'
WHILE (@String is not null and @String LIKE '%[a-Z]')
BEGIN  

-- Chop off the end character
   SET @String = 
         CASE LEN(@String) WHEN 0 THEN @String 
            ELSE LEFT(@String, LEN(@String) - 1) 
         END 
END  


SELECT right(@String, len(@String) - charindex('-', @String))