2010-07-18 8 views
0

Dans ma base de données, j'ai une table dans laquelle l'une des colonnes stocke joining_months en format de chaîne comme Janvier, Février, Mars .... (et ainsi de suite).Comment traiter une chaîne comme un mois dans SQL Server

Maintenant, je veux exécuter une requête SQL sur cette table pour récupérer ces lignes uniquement dans lesquelles se joindre au mois est avant ou après un mois spécifié par l'utilisateur.

Quelque chose comme:

select * from table1 where joining_month >or< 'March' 

Comment puis-je comparer les mois stockés sous forme de chaîne comme celui-ci?

Aidez s'il vous plaît!

+1

utilisez '' = 'ou <>'? –

Répondre

3

Je trouve cela plutôt hors de la boîte façon de le faire sur cette page:

Une autre façon de faire serait la suivante: SELECT CHARINDEX (monthname, « XXJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC »)/3 AS monthNumber

Vous pouvez le modifier en extrayant d'abord les 3 premiers caractères du mois de votre table et en les comparant à la chaîne codée en dur 'XXJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'. Ça devrait le faire.

Ainsi, votre requête peut être quelque chose comme ceci:

select CHARINDEX(substing(joining_month,1,3),'XXJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC')/3 
      AS monthnumber, * 
      from table1 
      where monthnumber >or< 3 
+1

Vous n'auriez pas besoin du/3 si le numéro du mois n'est pas nécessaire. Assez intelligent si vous ne pouvez pas changer le schéma – gbn

+0

+1 pour l'intelligence – quantumSoup

+0

vraiment bonne méthode .. travailler avec succès .. merci beaucoup ..! – Akshay

3

Vous devriez avoir une autre colonne sur la table qui a la valeur numérique du mois associé au nom, par ex. 1 pour "Janvier", 2 pour "Février", etc.

Ensuite, vous pouvez simplement filtrer sur le nom de la chaîne tout en faisant la comparaison sur la valeur numérique. Il suffit d'être prudent, une comparaison directe comme celle-ci ne fonctionne que si les mois sont dans les dates qui sont pour la même année. Si elles sont dans des années différentes, comparer les mois est inutile, sauf si vous prenez l'année en compte.

+0

Pour moi, il n'est pas possible de faire des changements dans la base de données. Et je n'ai pas à me soucier des années parce que l'application maintient les données d'une seule année. – Akshay

Questions connexes