SQL Server: как я могу объединить функции CHARINDEX, LEFT и RIGHT в одно выражение? - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть следующие выражения 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 выражение, которое выполняет всю работу со строкой одновременно?

Ответы [ 2 ]

2 голосов
/ 10 апреля 2019

Выражение может быть просто записано как:

SELECT SUBSTRING(
    @@SERVERNAME,
    CHARINDEX('-', @@SERVERNAME) + 1,
    LEN(@@SERVERNAME) - CHARINDEX('-', @@SERVERNAME) - 2
)
1 голос
/ 11 апреля 2019

Вопрос:

как объединить функции CHARINDEX, LEFT и RIGHT в выражение

Ответ, очевидно, таков:

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

Причина, по которой я скопировал / вставил первое выражение SET для замены @SERVERNAME во втором выражении SET, заключается в том, что SQL Server выполнит первое выражение перед вторым. Таким образом, строка будет сохранена в первом @SERVERNAME, затем @SERVERNAME будет обновлено вторым выражением SET.

...