ฉัน concatenate สองภาษา sql คอลัมน์และใช้มันใน DATE_ADD ฟังก์ชัน

0

คำถาม

ฉันต้องมาติดอยู่กับการปัญหานี้สำหรับชั่วโมงแล้ว

ฉันมีโต๊ะโทร บอกรับ กับช่องข้อมูลต่อไปนี้

  • หมายเลข(int)
  • sub_type(อาทิตย์เดือน,ปี)(Varchar)
  • sub_duration(int)
  • last_renewal(วัน)

enter image description here

ฉันต้องการที่จะผสมที่ sub_duration และ sub_type และเพิ่มมันไป last_renewal (จะได้ expiring วันที่)แล้วโปรดตรวจสอบว่าผลลัพธ์ที่ได้มากกว่า/น้อยกว่ากว่าคนปัจจุบันออกเดท ด้านล่างคือสิ่งที่ผมทำลงไปไม่ได้อีกแล้ว"

SELECT s.*
FROM subscription s
WHERE (SELECT DATE_ADD(s.last_renewal, INTERVAL (CONCAT(s.sub_duration), ' ', s.sub_type)))< CURDATE()

mysql sql
2021-11-24 03:14:18
2

คำตอบที่ดีที่สุด

1

คุณสามารถรวบรว CASE กับ DATE_SUB จะทำให้วันหมดอายุใน subquery. แล้วมันง่ายที่จะเปรียบเทียบและวิเคราะห์ละคดีออกจากกัน

สำหรับตัวอย่าง:

select *,
  case when expiring_date < curdate() then 'Expired'
       when expiring_date > curdate() then 'Active'
       else 'Expires Today'
  end as status
from (
  select *,
    case when sub_type = 'week' then date_add(last_renewal, interval sub_duration week)
         when sub_type = 'month' then date_add(last_renewal, interval sub_duration month)
         when sub_type = 'year' then date_add(last_renewal, interval sub_duration year)
    end as expiring_date
  from subscription
) x

ผลลัพธ์:

 id  sub_type  sub_duration  last_renewal  expiring_date  status  
 --- --------- ------------- ------------- -------------- ------- 
 1   month     2             2021-04-12    2021-06-12     Expired 
 2   week      1             2021-07-11    2021-07-18     Expired 
 3   week      4             2021-11-11    2021-12-09     Active  

เห็นวิ่งตัวอย่างที่ DB ลื่นไหล.

2021-11-24 03:52:03

ขอบคุณ,พี่ชาย,นี่ซ่อนปัญหาของฉันแต่ฉันเปลี่ยนของคุณ date_sub จะ date_add
Osah Prince

@OsahPrince ซ่อมแล้ว ยังไงก็ตามฉันคิดว่าคุรคำอธิบาย
The Impaler
0

ตัวเลือกการขอข้อมูลยอมรับคำค้นไม่ได้ใช้เส้นสาย

คุณสามารถใช้ case when

กุญแจส่วนหนึ่งของภาษา sql เป็นแบบนี้

select *
  from (
select 'week' sub_type, 1 sub_duration union all
select 'year' sub_type, 1 sub_duration) s
 where case when s.sub_type = 'week'
            then DATE_ADD(now(), INTERVAL s.sub_duration week) 
            when s.sub_type = 'month'
            then DATE_ADD(now(), INTERVAL s.sub_duration month) 
            when s.sub_type = 'year'
            then DATE_ADD(now(), INTERVAL s.sub_duration year) 
       end > now()
2021-11-24 03:28:16

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่