Je dois obtenir le mois à partir d'une colonne qui stocke la chaîne en forme - donc si la valeur était y a-t-il une fonction intégrée dans SQL Server 2008 pour atteindre quelque chose comme ça? P> P> 'feb2007' code> alors je dois revenir
2 code> ou bien si la valeur était
'sep2009' code> alors je dois récupérer
9 code>. p>
7 Réponses :
Essayez ceci:
select datepart(mm, cast('feb2008' as datetime))
Je suppose que cela dépend vraiment des paramètres régionaux. Je parie qu'il peut être possible pour SQL Server de ne pas reconnaître cette chaîne comme date.
Je frissons toujours quand quelqu'un stocke une date / heure comme Varchar / etc plutôt que le type de données de date / heure indigène ...
@OMG Ponies Qu'en est-il de l'importation XML sans XSD ci-joint? Ou Excel Data connectés à votre serveur SQL? Ou peu importe. Ces problèmes sont pair pour le cours.
Si rien d'autre, vous pouvez créer une table avec vos noms mois et vos valeurs numériques. P>
Si la fonction Server reconnaît toujours vos noms de mois correctement, vous êtes bon, mais si l'une de ces données était entrée manuellement, il pourrait y avoir des mal orthographiques ou d'autres incohérences, et une table vous permettrait de les supporter. P >
aussi ceci: p>
Sélectionnez le mois (Cast (Date_Col en tant que DateTime)) P>
Ou juste sélectionnez le mois ('sep2008') code>
Je suis tout à fait d'accord avec Beth ici - mais avec des justifications quant à la raison pour laquelle cela devrait être fait par opposition à un dernier recours: p>
Les données doivent être stockées dans son format natif. Vous ne devriez plus le stocker comme une chaîne que vous en devoir un entier 8 bits. Cela fait tout autant / peu de sens. SQL est une bête très intelligente, mais si vous bousillez vos types de données fondamentaux, la plupart de ses fonctionnalités utiles et heuristiques sortent de la fenêtre - même des trucs de base comme indexation forte> et Tri fort> . Sans parler de vos données devient SQL Server Explicit (c.-à-d. Repose sur certains comportements SQL) par opposition au générique, réduisant la portabilité. P>
Pour le mettre en termes plus formels: vous le forcez à devenir des informations sur la couche de données. C'est une antithèse à toutes les règles connues de la manipulation de données. P>
SELECT month(column); This should work, it's been a while since I've used SQL Server, though.
datepart(month,getdate())
Peut-être besoin de revoir votre conception de base de données, si possible. Beaucoup plus efficace pour la convertir en DateTime avant de stocker dans la table. Par exemple, la recherche d'une gamme de dates prendra beaucoup plus de temps qu'elle n'aura besoin, car vous devrez lancer chaque valeur distincte avant de trouver les dates de votre gamme. P>
Les valeurs sont stockées dans une liste séparée par des virgules?
Non, cela vient de stocker comme une entrée. Je veux dire une ligne a une valeur feb2007, puis la deuxième ligne a la valeur Sep2008
J'espère que vous ne stockez pas les citations code> ' code> dans la colonne! Les dates de Varcharis sont assez mauvaises!
J'espère qu'il n'y a pas de
Sept2008 CODE> CORDES IN :)
Ya..Je n'aime pas ... Je travaille avec une base de données héritée qui a des dates de Varchark et de demander à changer quelque chose est Blashphemy!