Comment puis-je sélectionner le premier jour d'un mois en SQL?
J'ai juste besoin de sélectionner le premier jour du mois d'une variable datetime.
Je sais que c'est assez facile à faire en utilisant ce genre de code:
select CAST(CAST(YEAR(@mydate) AS VARCHAR(4))
+ '/' + CAST(MONTH(@mydate) AS VARCHAR(2)) + '/01' AS DATETIME)
Mais ce n'est pas très élégant, et probablement pas très rapide non plus.
Est-il une meilleure façon de le faire? Je suis à l'aide de SQL Server 2008.
Vous devez vous connecter pour publier un commentaire.
select DATEADD(month, DATEDIFF(month, 0, cast('0002-01-01 00:00:00.0000000' as datetime2)), 0)
lèvera une erreur.SELECT EOMONTH(@mydate) AS EndOfMonth
vous donnera le dernier jour du mois.w3
et cela fonctionne bien mais quand je lance le même dans mon phpmyadmin j'ai eu cette erreur#1305 - FUNCTION dataabseName.DATEADD does not exist
En plus de la réponse ci-dessus, un moyen basé sur une fonction introduite dans
sql 2012
À partir de SQL Server 2012:
De la coulée d'une chaîne de caractères (c'est à dire "5/1/2009") de type datetime est certainement plus lisible, mais nous avons trouvé un code tout à l'arrière qui retourne le premier du mois...
Requête Simple:
Il est probablement assez rapide. Pourquoi ne pas créer une fonction sql.
Cela marche aussi:
Operand type clash: date is incompatible with int
. Je suppose que c'est parce que vous essayez d'utiliser la-
opérateur sur une date?Veuillez utiliser cette
Pour Server 2012
Avant Server 2012
Avenir googlers, MySQL, essayez ceci:
sql-server
question,date_sub
etinterval
sontmysql
.Si vous êtes à la recherche à ce sujet aujourd'hui, et à l'aide de SQL server 2012 ou plus récent, vous avez la EOMONTH fonction qui rend les choses plus faciles:
Vous pouvez modifier la fonction GETDATE() avec quelle que soit la variable de date que vous souhaitez.
Ici, nous pouvons utiliser en dessous de requête à la date du premier jour du mois et le dernier jour du mois.
Si vous utilisez SQL Server 2012 ou au-dessus;
L'-2 obtiendrez-vous le premier jour du mois dernier. c'est à dire, getdate() est 10/15/18. Vos résultats de 9/1/18. Changement de -1, et vos résultats seront 10/1/18. 0 serait le début du mois prochain, 11/1/2018.. etc etc.
ou
Essayez d'exécuter la requête suivante:
SELECT DATE_ADD(DATE_ADD(LAST_DAY(CURRENT_DATE-INTERVAL 1 DAY),INTERVAL 1 DAY),INTERVAL -1 MONTH)
Premier et le dernier jour du mois en cours:
sélectionnez CONVERTIR(date,DATEADD(dd,-(DATEPART(dd,getdate())-1),getdate()),120)
Cette fonction sera de vous fournir de partie date de la date de début du mois
.....................................................................
Si vous ne voulez pas le temps, puis de le convertir à JOUR ou si vous voulez faire de temps de 0:00:00, de le Convertir à la DATE de retour de type DATETIME.
Changement GETDATE() à la date à laquelle vous souhaitez
J'ai utilisé la fonction GETDATE() comme une date pour travailler avec, vous pouvez la remplacer par la date à laquelle vous en avez besoin.
Voici comment cela fonctionne: nous avons d'Abord le format de la date au format AAAAMMJJ... format de troncature pour garder juste les 6 caractères les plus à gauche afin de garder tout le AAAAMM partie, puis ajouter '01', comme le mois et le tour est joué! vous avez le premier jour du mois en cours.
BTW, la performance est grande sur ce!
J'personnel a recommandé que le sql ci-dessous parce que quand j'essaie d'utiliser la fonction de date dans la condition de la clause, sa ralentir ma vitesse de requête très bien.
de toute façon, n'hésitez pas à essayer cette.
De ne pas rivaliser avec les grands esprits ici, mais une simple suggestion légèrement différente que l'on a accepté la réponse ci-dessus.
J'aime utiliser
FORMAT
, vous pouvez même spécifier un tempsDans Sql Server 2012,
Cette requête devrait fonctionner très bien sur MySQL:
Pour quiconque cherche toujours une réponse, cela fonctionne comme un charme et fait disparaître toute dateadds. L'horodatage est en option en cas de spécification des besoins, mais fonctionne sans ainsi.
Ce pourrait être une nouvelle fonction, mais vous pouvez également utiliser les fonctions anciennes :
Si la date indiquée dans la variable a par exemple
'2017-10-29'
il serait de retour d'une date de
'2017-10-01'
https://docs.microsoft.com/en-us/sql/t-sql/functions/datefromparts-transact-sql?view=sql-server-ver15
Cela semble bêtement simple, mais qui fonctionne pour moi:
SELECT FORMAT(GETDATE(), 'yyyy-MM-01')