0

我有以下 SQL 表达式,它们完全符合我的需要:

DECLARE @ServerName NVARCHAR(20)

SET @ServerName = RIGHT(@@SERVERNAME, LEN( @@SERVERNAME) - CHARINDEX('-', @@SERVERNAME))

SET @ServerName = LEFT(@ServerName, LEN(@ServerName) - 2)

SELECT @ServerName;

但是,如果可能的话,我想将这两个 SET 表达式合并为一个。我试过自己做,但该CHARINDEX部分让我失望。我怎样才能将这两者结合起来,以便我有一个SET表达式可以同时处理字符串的所有工作?

4

2 回答 2

2

表达式可以简单地写成:

SELECT SUBSTRING(
    @@SERVERNAME,
    CHARINDEX('-', @@SERVERNAME) + 1,
    LEN(@@SERVERNAME) - CHARINDEX('-', @@SERVERNAME) - 2
)
于 2019-04-10T20:27:29.113 回答
1

问题是:

如何将 CHARINDEX、LEFT 和 RIGHT 函数组合成一个表达式

答案显然是:

SET @ServerName = 
LEFT(RIGHT(@@SERVERNAME, LEN( @@SERVERNAME) - CHARINDEX('-', @@SERVERNAME)), LEN(RIGHT(@@SERVERNAME, LEN( @@SERVERNAME) - CHARINDEX('-', @@SERVERNAME))) - 2)

我复制/粘贴第一个 SET 表达式以替换第二个 SET 表达式中的 @SERVERNAME 的原因是 SQL Server 将在第二个表达式之前执行第一个表达式。因此字符串将存储在第一个 @SERVERNAME 中,然后 @SERVERNAME 将由第二个 SET 表达式更新。

于 2019-04-10T21:14:09.807 回答