删除特定字符后的字符串的一部分(从右到左)

时间:2019-03-28 08:15:15

标签: sql-server

我希望这种情况发生: (左侧是完整的字符串。在右侧,“ ---->”之后是我想要的输出)

3.4.2.12 -----> 3.4.2
3.4.2.1-------? 3.4.2

我得到这个:

3.4.2.12-----> 3.4.2.  (note the '.' in the end)
3.4.2.1-----? 3.4.2 (this is good for me)

我用了这个:

select 
LEFT( column_name, len( column_name) - charindex('.',   column_name)) 
from table_name

3 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,那么您需要这样做:

select left( column_name, len(column_name) - charindex('.', reverse(column_name)) ) from table_name

带有硬编码值的证明:

select left( '3.4.2.12', len('3.4.2.12') - charindex('.', reverse('3.4.2.12'))) -- 3.4.2
select left( '3.4.2.1', len('3.4.2.1') - charindex('.', reverse('3.4.2.1'))) -- 3.4.2

答案 1 :(得分:1)

如果要保留最后一个“。”的所有内容,可以使用以下代码:

USE TEMPDB

SELECT SUBSTRING ('3.4.2.12', 1, LEN ('3.4.2.12') - (CHARINDEX ('.', REVERSE ('3.4.2.12'))))

答案 2 :(得分:1)

DECLARE
    @var VARCHAR(20) = '3.4.2.12'

SELECT
    LEFT(@var, LEN(@var) - CHARINDEX('.', REVERSE(@var)))

SET @var = '3.4.2.1'

SELECT
    LEFT(@var, LEN(@var) - CHARINDEX('.', REVERSE(@var)))

我们将单词翻过来,寻找点,然后从长度中减去最后一个点的位置。