SQL Server Rex在通配符中获取字符串

时间:2019-01-16 08:07:54

标签: sql sql-server string

例如,我有一个带有表名和类似模式的字符串:

[dbo].[statistical]

如何从该字符串中仅提取表名statistical

2 个答案:

答案 0 :(得分:3)

这是PARSENAME的用途:

SELECT PARSENAME('[dbo].[statistical]', 1)
SELECT PARSENAME('[adventureworks].[dbo].[statistical]', 1)
SELECT PARSENAME('[adventureworks]..[statistical]', 1)
SELECT PARSENAME('[statistical]', 1)
SELECT PARSENAME('dbo.statistical', 1)
-- all examples return 'statistical'

答案 1 :(得分:1)

您也可以尝试以下方法:

declare @s varchar(100) = 'asd.stadfa';

select reverse(substring(s, 1, charindex('.', s) - 1)) from (
    select reverse(@s) s
) a

charindex返回字符的第一个出现位置,因此您反转初始字符串以使最后一个点优先。然后,您只需要使用子字符串来提取反向字符串的第一部分,这就是您想要的。最后,您需要再应用reverse一次来回退提取的字符串:)