Rumah > Soal Jawab > teks badan
Ini adalah kod lengkap saya, tetapi apabila saya melancarkannya,
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)
Ralat ini berlaku.
Saya ingin menunjukkan senarai tarikh untuk April 2022 (kecuali Ahad dan Sabtu)
Sebagai contoh) tarikh mula ialah 2022-04-01 Tarikh tamat 30 April 2022
Hasilnya keluar->
Tarikh | Tarikh WD |
---|---|
2022-04-01 | (Jumaat) |
2022-04-04 | (Isnin) |
2022-04-05 | (Selasa) |
2022-04-06 | (Rabu) |
2022-04-07 | (Khamis) |
2022-04-08 | (Jumaat) |
2022-04-11 | (Isnin) |
.... | ... |
Bagaimana untuk membetulkan kod ini? tolong saya. Terima kasih
*** Saya tidak tahu cara menggunakan borang. Kerana saya tidak mempunyai jadual dan saya hanya mahu menggunakan SQL QUERY.
P粉5750559742024-02-26 11:23:47
Ralat sintaks adalah kerana contoh ditulis untuk SQL Server, bukan MySQL. Ia memerlukan sedikit pengubahsuaian untuk berfungsi dengan MySQL 8.x:
Anda tidak perlu DECLARE
用户定义的变量。只需使用 SET
untuk mengisytiharkan dan menetapkan nilai berubah
DATEADD()
ialah fungsi SQL Server. Setara dengan MySQL ialah DATE_ADD(Tarikh, unit ekspresi INTERVAL)
DATEPART(weekday,...)
ialah fungsi SQL Server. Untuk MySQL, cuba DAYOFWEEK(tarikh)
Akhir sekali, gunakan kata kunci RECURSIVE
dalam CTE. Daripada Dokumen: 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)
Hasil:
Tarikh | Tarikh 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<>fiddle sini p>