Maison > Questions et réponses > le corps du texte
Voici mon code complet, mais quand je le lance,
DECLARE @StartDateTime DATETIME DECLARE @EndDateTime DATETIME SET @StartDateTime = '2022-04-01' SET @EndDateTime = '2022-04-29'; WITH DateRange(Dates, DateWD) AS ( SELECT @StartDateTime as Date, DATEPART(WEEKDAY, @StartDateTime) UNION ALL SELECT DATEADD(d,1,Dates), DATEPART(WEEKDAY, DATEADD(d,1,Dates)) FROM DateRange WHERE Dates < @EndDateTime ) SELECT Dates, DateWD FROM DateRange WHERE DATEWD NOT IN(1,7) AND Dates NOT IN( SELECT (HOLI_YEAR + '-' + HOLI_MONTH + '-' + HOLI_DAY) AS DATE FROM TB_HOLIDAY_CODE OPTION (MAXRECURSION 0)
Cette erreur se produit.
Je souhaite afficher une liste de dates pour avril 2022 (sauf dimanche et samedi)
Par exemple), la date de début est le 01/04/2022 Date de fin 30 avril 2022
Les résultats sont sortis->
Date | Date WD |
---|---|
2022-04-01 | (vendredi) |
2022-04-04 | (lundi) |
2022-04-05 | (mardi) |
2022-04-06 | (mercredi) |
2022-04-07 | (jeudi) |
2022-04-08 | (vendredi) |
2022-04-11 | (lundi) |
.... | ... |
Comment corriger ce code ? S'il vous plaît aidez-moi. Merci
*** Je ne sais pas utiliser les tableaux. Parce que je n'ai pas de table et que je veux juste utiliser SQL QUERY.
P粉5750559742024-02-26 11:23:47
L'erreur de syntaxe est due au fait que l'exemple a été écrit pour SQL Server, pas pour MySQL. Cela nécessite quelques ajustements pour fonctionner avec MySQL 8.x :
Vous n'avez pas besoin DECLARE
用户定义的变量。只需使用 SET
de déclarer et d'attribuer des valeurs de variables
DATEADD()
est une fonction SQL Server. L'équivalent MySQL est DATE_ADD(Date,INTERVAL expression unit)
DATEPART(weekday,...)
est une fonction SQL Server. Pour MySQL, essayez DAYOFWEEK(date)
Enfin, utilisez des mots-clés RECURSIVE
dans CTE. Extrait de Documents : p>
SQL
SET @StartDateTime = '2022-04-01'; SET @EndDateTime = '2022-04-29'; WITH RECURSIVE DateRange(Dates, DateWD) AS ( SELECT @StartDateTime, DayOfWeek(@StartDateTime) UNION ALL SELECT DATE_ADD(Dates, INTERVAL 1 DAY), DayOfWeek(DATE_ADD(Dates, INTERVAL 1 DAY)) FROM DateRange WHERE Dates < @EndDateTime ) SELECT * FROM DateRange WHERE DateWDNOT IN(1,7)
Résultat :
Date | Date WD |
---|---|
2022-04-01 | 6 |
2022-04-04 | 2 |
2022-04-05 | 3 |
2022-04-06 | 4 |
2022-04-07 | 5 |
2022-04-08 | 6 |
2022-04-11 | 2 |
2022-04-12 | 3 |
2022-04-13 | 4 |
2022-04-14 | 5 |
2022-04-15 | 6 |
2022-04-18 | 2 |
2022-04-19 | 3 |
2022-04-20 | 4 |
2022-04-21 | 5 |
2022-04-22 | 6 |
2022-04-25 | 2 |
2022-04-26 | 3 |
2022-04-27 | 4 |
2022-04-28 | 5 |
2022-04-29 | 6 |
db<>violon ici p>