У моїй таблиці бази даних було поле зі значеннями у форматі:
Ім'я працівника (Ідентифікатор працівника)
І мені потрібно було витягнути лише Ідентифікатор працівника.
Наприклад, якщо значення було “Viktor Vektor (277)”, то я хотів отримати “277”.
Це рішення я моделював подібно до попередньої публікації, де я розглядав отримання імені файлу (без розширення) в SQL.
Ключові поля — перше (щоб побачити, як виглядають приклади даних) і останнє.
Рішення
SELECT
myTable.employeeNameAndId
, CHARINDEX('(', myTable.employeeNameAndId) AS positionOpenParenthesis
, CHARINDEX(')', myTable.employeeNameAndId) AS positionCloseParenthesis
, CASE WHEN
CHARINDEX('(', myTable.employeeNameAndId) > 0
AND CHARINDEX(')', myTable.employeeNameAndId) > 0
THEN
SUBSTRING(myTable.employeeNameAndId
, CHARINDEX('(', myTable.employeeNameAndId) + 1
, CHARINDEX(')', myTable.employeeNameAndId) - CHARINDEX('(', myTable.employeeNameAndId) - 1
)
ELSE
myTable.employeeNameAndId
END AS employeeId
FROM dbo.myTable
Вивід
Пояснення
Я перевіряю, чи є обидва круглі дужки.
- Якщо обидві присутні, функція
SUBSTRING
витягує текст між дужками. - Якщо будь-якої з дужок немає, використовується оригінальне значення.
Ключові функції:
CHARINDEX
: Знаходить позицію конкретного символа в рядку.SUBSTRING
: Витягує частину рядка на основі початкової позиції та довжини.
Перекладено з: How to Parse Employee IDs Concatenated with Names Using SQL