Mysql mendapatkan tarikh dan julat tarikh untuk tarikh tertentu (ralat sintaks)
P粉637866931
P粉637866931 2024-02-25 19:51:13
0
1
273

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

membalas semua(1)
P粉575055974

Ralat sintaks adalah kerana contoh ditulis untuk SQL Server, bukan MySQL. Ia memerlukan sedikit pengubahsuaian untuk berfungsi dengan MySQL 8.x:

  1. Anda tidak perlu DECLARE 用户定义的变量。只需使用 SET untuk mengisytiharkan dan menetapkan nilai berubah

  2. DATEADD() ialah fungsi SQL Server. Setara dengan MySQL ialah DATE_ADD(Tarikh, unit ekspresi INTERVAL)

  3. DATEPART(weekday,...) ialah fungsi SQL Server. Untuk MySQL, cuba DAYOFWEEK(tarikh)

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

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

dbfiddle sini p>

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!