2017-02-21 4 views
2

従業員の性別は(SSN)でなければなりません。また、SSNの最後の数字が偶数(0,2,4,6,8)の場合、性別は女性ですSSNの最後の数字が奇数(1,3,5,7,9)の場合、性別は男性です。

私のデータベースでは、従業員のSSNはex: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

あなたのSSNは(すなわち、数字のみが含まれている)、有効な保証されていると仮定すると、その式RIGHT(SSN,1)%2(またはRIGHT(RTRIM(SSN),1)%2最後に余分なスペースがあるかどう)は、男性用、女性用01を返します。数学を簡単にするように設定されている場合、複雑な文字列検索は必要ありません。

場合によっては、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

関連する問題