我希望这种情况发生: (左侧是完整的字符串。在右侧,“ ---->”之后是我想要的输出)
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
答案 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)))
我们将单词翻过来,寻找点,然后从长度中减去最后一个点的位置。