我应该从他们的(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
答案 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