Як парсити ідентифікатори працівників, що конкатеновані з іменами, за допомогою SQL

У моїй таблиці бази даних було поле зі значеннями у форматі:

Ім'я працівника (Ідентифікатор працівника)

І мені потрібно було витягнути лише Ідентифікатор працівника.

Наприклад, якщо значення було “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

Вивід

pic

Пояснення

Я перевіряю, чи є обидва круглі дужки.

  • Якщо обидві присутні, функція SUBSTRING витягує текст між дужками.
  • Якщо будь-якої з дужок немає, використовується оригінальне значення.

Ключові функції:

  • CHARINDEX: Знаходить позицію конкретного символа в рядку.
  • SUBSTRING: Витягує частину рядка на основі початкової позиції та довжини.

Перекладено з: How to Parse Employee IDs Concatenated with Names Using SQL

Leave a Reply

Your email address will not be published. Required fields are marked *