通过SSN查找员工的性别

时间:2017-02-21 12:26:44

标签: sql-server reporting-services

我应该从他们的(SSN)找到员工的性别。理论上,如果SSN的最后一个数字是偶数(0,2,4,6,8),性别是女人或/否则,如果SSN的最后一个数字是奇数(1,3,5,7,9)性别 man

员工的SSN在我的DataBase中看起来像这样,例如:1111112020或22222231 - 列名是XX,数据类型是nvarchar(30)。

我写的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

3 个答案:

答案 0 :(得分: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;

我应该注意到,我不知道性别是以这种方式分配给美国社会保障号码。

答案 1 :(得分:0)

假设您的SSN保证有效(即仅包含数字),则表达式RIGHT(SSN,1)%2(如果末尾有额外空格,则为RIGHT(RTRIM(SSN),1)%2)将为女性返回0男性为1。当事情设置好使数学变得容易时,不需要复杂的字符串搜索。

如果您愿意,可以选择将其放在CASE中,例如

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

答案 2 :(得分: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