Mysql obtient la date et la plage de dates pour une date spécifique (erreur de syntaxe)
P粉637866931
P粉637866931 2024-02-25 19:51:13
0
1
276

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粉637866931
P粉637866931

répondre à tous(1)
P粉575055974

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 :

  1. Vous n'avez pas besoin DECLARE 用户定义的变量。只需使用 SET de déclarer et d'attribuer des valeurs de variables

  2. DATEADD() est une fonction SQL Server. L'équivalent MySQL est DATE_ADD(Date,INTERVAL expression unit)

  3. DATEPART(weekday,...) est une fonction SQL Server. Pour MySQL, essayez DAYOFWEEK(date)

  4. 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 

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

dbviolon ici p>

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!