首页 > 解决方案 > where子句中的mysql concat和substring_index

问题描述

我在表中有一个值,我从中选择,格式如下:

day_shared =
    12_month
    3_month
    1_week

我需要将它用于 DATE_ADD() 中的函数,这是我目前拥有的代码,但它似乎出错了,我不确定我做错了什么。非常感谢一些帮助/建议

WHERE
    NOW() <  DATE_ADD(date_posted, INTERVAL CONCAT(CONVERT(SUBSTRING_INDEX(day_shared,'_', 1), SIGNED INTEGER),' ',UPPER(SUBSTRING_INDEX(day_shared,'_', -1))))

戈登尝试的解决方案:

NOW() < DATE_ADD(
  date_posted, 
  (
    CASE WHEN day_shared LIKE '%_week' THEN INTERVAL (
      SUBSTRING_INDEX(day_shared , '_', 1) + 0
    ) WEEK WHEN day_shared  LIKE '%_month' SUBSTRING_INDEX(day_shared , '_', 1) + 0 DAY THEN INTERVAL (
      SUBSTRING_INDEX(day_shared , '_', 1) + 0
    ) MONTH END
  )
) 


Something is wrong in your syntax '(
  CASE WHEN day_shared LIKE '%_week' THEN INTERVAL (
    SUBSTRING' on line 8

标签: mysqlsqlsubstringconcatenation

解决方案


NOW()
<
CASE
  WHEN day_shared LIKE '%_week'
    THEN
      DATE_ADD(
        date_posted,
        INTERVAL (SUBSTRING_INDEX(day_shared , '_', 1) + 0) WEEK
      )
  WHEN day_shared LIKE '%_month'
    THEN
      DATE_ADD(
        date_posted,
        INTERVAL (SUBSTRING_INDEX(day_shared , '_', 1) + 0) MONTH
      )
END

推荐阅读