SQL Server Разделение и объединение - PullRequest
2 голосов
/ 09 апреля 2011

У меня есть данные в следующем формате в таблице базы данных сервера sql

[CPOID]  [ContractPO]        [ContractPOTitle]
1        10-SUP-CN-CNP-0001  Drytech
2        10-SUP-CN-CNP-0002  EC&M

Мне нужно написать хранимую процедуру для генерации следующего результата

[CPOID]      [ContractPO]        [ContractPOTitle]   [ConcatField]
    1        10-SUP-CN-CNP-0001  Drytech            CNP-0001-Drytech            
    2        10-SUP-CN-CNP-0002  EC&M               CNP-0002-EC&M

где [ConcatField] генерирует результат, используя разбиение двух последних значений столбца [ContractPOTitle] и объединяя его с [ContractPOTitle]

1 Ответ

3 голосов
/ 09 апреля 2011

Если поле ContractPO всегда имеет одинаковую длину, вы можете просто сделать:

SELECT 
    CPOID, 
    ContractPO, 
    ContractPOTitle, 
    RIGHT(ContractPO, 8) + '-' + ContractPOTitle as [ConcatField]
FROM MyTable

Предполагая, что длина поля ContractPO не является фиксированной И мы должны полагаться на удаление текста послерядом с последним '-' будет работать следующий SQL.Это немного уродливо, но эти типы операций необходимы, потому что в SQL Server не существует функции LASTINDEX, доступной из коробки.

SELECT 
    CPOID, 
    ContractPO, 
    ContractPOTitle, 
    RIGHT(ContractPO, CHARINDEX('-', REVERSE(ContractPO), CHARINDEX('-', REVERSE(ContractPO)) + 1) - 1) + '-' + ContractPOTitle as [ConcatField]
FROM @myTable
...