Obtenir le numéro de la semaine hors une date dans MS SQL Server 2005?
Est-il possible de créer une instruction sql qui sélectionne le numéro de la semaine (PAS le jour de la semaine, ou le nombre de jours dans une semaine). Je suis en création d'une vue de sélectionner ce supplément d'informations avec un couple de d'autres domaines, et ne peut donc pas utiliser une procédure stockée. Je suis conscient qu'il est possible de créer un fichier UDF de faire le tour, mais si possible, je préfère n'avez qu'à ajouter une vue à cette base de données, que les deux d'une vue et d'une fonction.
Des idées? Aussi d'où je viens, la semaine commence le lundi et la semaine 1 est la première semaine de l'année avec au moins 4 jours.
Liés:
Comment dois-je calculer le numéro de la semaine donné une date?
OriginalL'auteur Per Hornshøj-Schierbeck | 2008-12-08
Vous devez vous connecter pour publier un commentaire.
Être conscient qu'il existe des différences dans ce qui est considéré le bon numéro de la semaine, en fonction de la culture. Les numéros de semaine, dépendent d'un couple d'hypothèses qui diffèrent d'un pays à l'autre, voir Article de wikipédia sur le sujet. Il y a un La norme ISO (ISO 8601) qui s'applique aux numéros de semaine.
SQL server intégré
DATEPART()
fonction ne doit pas nécessairement faire La bonne Chose. SQL Server suppose 1er jour de la semaine 1 serait le 1er janvier pour de nombreuses applications, c'est faux.Le calcul des numéros de semaine correctement est non-trivial, et les différentes implémentations peuvent être trouvés sur le web. Par exemple, il y a une UDF qui calcule la ISO les numéros de semaine à partir de 1930-2030, en étant une parmi beaucoup d'autres. Vous aurez à vérifier ce qui fonctionne pour vous.
C'est à partir de Livres En Ligne (si vous voudrez probablement utiliser celui de Jonas Lincoln répondre, le BOL version semble être incorrect):
Mais si vous voulez vérifier si l'UDF - t-il, il sera plus rapide que d'une table supplémentaire (si ce qui compte pour vous), et vous n'auriez pas à le lire très souvent. 😉 Comme je l'ai dit, il existe d'autres implémentations de là-bas si vous n'aimez pas/ne peut pas l'utiliser.
Je pense que l'appel de cette udf prendra plus de temps que d'une jointure dans un indexée jour/semaine? J'ai peut-être tort, mais se concentrer sur cette tâche est de garder la complexité faible (tout le monde sait comment faire une jointure interne, mais tout le monde ne serait comprendre ce udf). Merci de le signaler - je pourrais avoir à le tester 😉
Jamais entendu parler de DATEPART(ISO_WEEK,@DATE) ?
oui je l'ai, mais sql server 2005 n'a pas
OriginalL'auteur Tomalak
Vous avez besoin de l'ISO semaine. De http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=60510, voici une mise en œuvre:
Lincoln: c'est correct
Jamais entendu parler de DATEPART(ISO_WEEK,@DATE) ?
Il était à la recherche d'une solution pour SQL Server 2005, qui ne prend pas en charge ISO_WEEK.
Pour moi, cela m'a donné de meilleurs résultats que la réponse Tomalak - pour 2014-09-28 il retourne 39 (et c'est correct! - weeknumber.net/?q=2014-09-28), tandis que Tomalak réponse renvoie 40.
OriginalL'auteur Jonas Lincoln
Ressemble à la DATEPART mssql fonction devraient vous aider à ...
Bien, je vais être.. il existe un moyen de définir le premier jour de la semaine, DATEFIRST
Mise à jour: Maintenant, je comprends mieux, ce que l'OP veut.. ce qui est logique pour cela. Je ne pense pas que MSSQL aurait fonctions de riches au niveau de la personnalisation. Mais je me trompe peut-être... je pense que vous aurez à rouler vos propres UDF ici...désolé
OriginalL'auteur Gishu
OUBLIER LES AUTRES RÉPONSES
La question précise "la semaine commence le lundi et la semaine 1 est la première semaine de l'année avec au moins 4 jours." C'est norme ISO 8601 et que cette réponse fournit. Cette fonction est utilisée dans la production de notre site.
C'est tout ce dont vous avez besoin:
OriginalL'auteur Ian
Cela vous renvoie le numéro de la semaine de la date d'entrée en citations
OriginalL'auteur Samiksha
Ressemble datepart, vous obtiendrez une partie du chemin, mais vous aurez à régler pour obtenir votre numéro de semaine, sur la base du jour de la semaine du 1er janvier de l'année donnée. Je ne suis pas assez familier avec T-SQL pour le faire, mais cela devrait être possible. Dommage il n'y a pas un argument de mode comme dans MySQL
OriginalL'auteur ysth
avez-vous envisagé d'utiliser la SEMAINE de la fonction?
Ainsi, vous obtenez la semaine de l'année pour la date spécifiée que vous avez passé.
Ce sorties suivantes SQL2000 et SQL2005:
J'Espère que cela aide 🙂
OriginalL'auteur Doctor Jones
Pourquoi encore une fois, les gens qui font des montagnes de mole-collines, il étonne moi?
Si simple...
mais au moins c'est un point de départ et qu'ils peuvent jouer avec leurs propres paramètres de Culture.
incorrect. L'OP n'a pas mentionné quelque chose à propos d'une norme ISO
"Aussi d'où je viens, la semaine commence le lundi et la semaine 1 est la première semaine de l'année avec au moins 4 jours." = ISO standard
OriginalL'auteur Fandango68