2010-05-05 9 views
1

J'essaie de travailler avec ma table SQL.Requête SQL Server

J'ai 2 bâtiments avec les numéros de pièce 1 - 100 dans le bâtiment 1 et 101 - 199 dans le bâtiment 2. J'ai un champ de localisation (que je viens de créer) et je veux lancer une requête pour le remplir 'Bâtiment 1' ou 'Bâtiment 2' selon le numéro de pièce dans le champ 'Pièce'.

Un grand merci pour votre aide.

Cordialement

Scott

+1

@Galwegian: Vous ne comprenez pas pourquoi supprimer votre message, si la réponse est correcte? –

+0

Que voulez-vous dire? –

+0

Galwegian a posté une réponse qui était correcte, mais l'a depuis effacée. –

Répondre

4

Vous pouvez utiliser Case mettre à jour votre table:

Update your_table 
Set location = Case When room_number <= 100 Then 
         'Building 1' 
        Else 
         'Building 2' 
        End; 

Si la totalité de vos numéros ont trois chiffres suivis par d'autres caractères, en utilisant substring devrait fonctionner :

Case When Cast(Substring(room_number, 1, 3) As Int) <= 100 Then 

Sinc e pas toutes vos chambres commencent par trois chiffres (1A) vous pouvez utiliser PatIndex pour trouver la longueur du numéro:

Case When 
    Cast(
     Substring(room_number, 1, PatIndex('%[A-Z]%', room_number || 'A') - 1) 
    As Int) <= 100 
Then 

Je concaténant le A pour vous assurer qu'il fonctionne aussi avec salle numérique numéros.

+0

Merci. Comment l'obtenir pour faire face aux numéros de pièce tels que 120Z et 121Y? –

+0

Si tous les numéros de pièce contiennent 3 chiffres et un seul caractère, vous pouvez utiliser un SUBSTRING sur le numéro de pièce et comparer cette valeur dans l'instruction case. –

+0

Mes numéros de chambre vont de 1 à 500 et ont d'autres entre 120X, 121G, etc (seulement environ 20 chambres). –