2017-02-21 12 views
2

Я должен найти пол сотрудников из их (SSN). И теория есть, если последнее число SSN равно (0,2,4,6,8) пол женщина или/else, если последнее число SSN нечетное (1,3,5,7,9) пол: человек.

SSN сотрудников выглядит так в моей базе данных, например: 1111112020 или 22222231 - и имя столбца XX, а тип данных - nvarchar (30).Найти пол сотрудников из их SSN

SQL-код выглядит так, чтобы узнать пол сотрудников, и когда я выполнил запрос, я получаю NULL. Может кто-то, пожалуйста, назовите меня в правильном направлении. Благодарю.

DECLARE @Mand char(5) = '1,3,5,9,7' 
DECLARE @Woman char(5) = '0,2,4,6,8' 
DECLARE @Gender char (1) 

SELECT (
CASE 
WHEN right(rtrim(SSN),1) = @Mand THEN 'MAN' 
WHEN right(rtrim(SSN),1) = @Woman THEN 'Woman' 
ELSE NULL 
END) as gender 
FROM U 
WHERE I = XXX 

ответ

1

Вы не можете использовать строки и in таким образом. Просто используйте поименный список в запросе:

SELECT (CASE WHEN right(rtrim(SSN), 1) IN ('1', '3', '5', '7', '9') THEN 'MALE' 
      WHEN right(rtrim(SSN), 1) IN ('2', '4', '6', '8', '0') THEN 'FEMALE' 
     END) as gender 
FROM dbo.Users 
WHERE CustomerId = 214; 

В качестве альтернативы можно использовать LIKE:

SELECT (CASE WHEN rtrim(SSN) LIKE '%[13579]' THEN 'MALE' 
      WHEN rtrim(SSN) LIKE '%[24680]' THEN 'FEMALE' 
     END) as gender 
FROM dbo.Users 
WHERE CustomerId = 214; 

Я должен отметить, что я не в курсе, что гендерный назначаются этим путем для США номеров социального страхования.

+0

Спасибо Гордон, работа просто отлично. – RyaN

0

Предполагая, что ваши ПЛА гарантированы действительными (т.е. содержат только цифры), то выражение RIGHT(SSN,1)%2 (или RIGHT(RTRIM(SSN),1)%2, если есть дополнительное пространство в конце) вернет 0 для женщин и 1 для мужчин. Нет необходимости в сложном поиске строк, когда все было настроено для упрощения математики.

Затем вы можете по желанию поставить это в CASE, если хотите, например.

CASE RIGHT(SSN,1)%2 
    WHEN 0 THEN 'Female' 
    ELSE 'Male' 
END 
+0

Tnx для помощи Damien – RyaN

0
DECLARE @ie nvarchar(30) 
SET @ie = '1111112020' 
SELECT (
CASE 
WHEN right(rtrim(@ie),1) IN ('1','3','5','9','7') THEN 'MAN' 
WHEN right(rtrim(@ie),1) IN ('0','2','4','6','8') THEN 'Woman' 
END) as gender 
+0

tnx для справки George – RyaN