SQL 服务器 DATE_DIFF INTERVAL?
SQL Server DATE_DIFF INTERVAL?
你好我做错了什么??
我正在尝试显示 r.reizen 与 r.vertrek 相差 1 天的日期
有人可以帮忙吗
SELECT DISTINCT b.vertrek, b.reiscode, r.bestemming, r.dagen, r.prijs
FROM boekingen b
INNER JOIN reizen r ON b.reiscode = r.reiscode
WHERE b.reiscode <> 'JH10'
AND ((b.vertrek BETWEEN
(SELECT MIN(DATE_SUB(vertrek, INTERVAL 1 DAY)) FROM boekingen WHERE reiscode = 'JH10') AND
(SELECT MIN(DATE_ADD(vertrek, INTERVAL 1 DAY)) FROM boekingen WHERE reiscode = 'JH10')) OR
(b.vertrek BETWEEN (SELECT MAX(DATE_SUB(vertrek, INTERVAL 1 DAY)) FROM boekingen WHERE reiscode = 'JH10')
AND (SELECT MAX(DATE_ADD(vertrek, INTERVAL 1 DAY)) FROM boekingen WHERE reiscode = 'JH10')))
ORDER BY 1
Msg 102, Level 15, State 1, Line 6
Incorrect syntax near '1'.
Msg 102, Level 15, State 1, Line 7
Incorrect syntax near '1'.
Msg 102, Level 15, State 1, Line 8
Incorrect syntax near '1'.
Msg 102, Level 15, State 1, Line 9
Incorrect syntax near '1'.
简单的回答:您在 Microsoft SQL 服务器引擎中使用 DATE_SUB 的 MySQL 语法。这是 Microsoft SQL 错误,对于正在猜测的人....
Msg 102, Level 15, State 1
您使用的日期函数是:
DATE_SUB(vertrek, INTERVAL 1 DAY))
DATE_ADD(vertrek, INTERVAL 1 DAY)) FROM
Microsoft 变体是:
DATEADD(DAY, -1, vertrek)
DATEADD(DAY, 1, vertrek)
Accepteer dit antwoord en punten toekennen , bedankt.
除了修复日期算法之外,如果没有 WHERE
子句中的子查询,您的查询将更易于阅读。将摘要移动到 FROM
子句很容易:
SELECT DISTINCT b.vertrek, b.reiscode, r.bestemming, r.dagen, r.prijs
FROM boekingen b INNER JOIN
reizen r
ON b.reiscode = r.reiscode CROSS JOIN
(SELECT MIN(vertrek) as minv, MAX(vertrek) as maxv
FROM boekingen
WHERE reiscode = 'JH10'
) bm
WHERE b.reiscode <> 'JH10' AND
b.vertrek BETWEEN DATEADD(day, -1, minv) and DATEADD(day, 1, minv) AND
b.vertrek BETWEEN DATEADD(day, -1, maxv) AND DATEADD(day, 1, maxv)
ORDER BY b.vertek;
你好我做错了什么??
我正在尝试显示 r.reizen 与 r.vertrek 相差 1 天的日期
有人可以帮忙吗
SELECT DISTINCT b.vertrek, b.reiscode, r.bestemming, r.dagen, r.prijs
FROM boekingen b
INNER JOIN reizen r ON b.reiscode = r.reiscode
WHERE b.reiscode <> 'JH10'
AND ((b.vertrek BETWEEN
(SELECT MIN(DATE_SUB(vertrek, INTERVAL 1 DAY)) FROM boekingen WHERE reiscode = 'JH10') AND
(SELECT MIN(DATE_ADD(vertrek, INTERVAL 1 DAY)) FROM boekingen WHERE reiscode = 'JH10')) OR
(b.vertrek BETWEEN (SELECT MAX(DATE_SUB(vertrek, INTERVAL 1 DAY)) FROM boekingen WHERE reiscode = 'JH10')
AND (SELECT MAX(DATE_ADD(vertrek, INTERVAL 1 DAY)) FROM boekingen WHERE reiscode = 'JH10')))
ORDER BY 1
Msg 102, Level 15, State 1, Line 6
Incorrect syntax near '1'.
Msg 102, Level 15, State 1, Line 7
Incorrect syntax near '1'.
Msg 102, Level 15, State 1, Line 8
Incorrect syntax near '1'.
Msg 102, Level 15, State 1, Line 9
Incorrect syntax near '1'.
简单的回答:您在 Microsoft SQL 服务器引擎中使用 DATE_SUB 的 MySQL 语法。这是 Microsoft SQL 错误,对于正在猜测的人....
Msg 102, Level 15, State 1
您使用的日期函数是:
DATE_SUB(vertrek, INTERVAL 1 DAY))
DATE_ADD(vertrek, INTERVAL 1 DAY)) FROM
Microsoft 变体是:
DATEADD(DAY, -1, vertrek)
DATEADD(DAY, 1, vertrek)
Accepteer dit antwoord en punten toekennen , bedankt.
除了修复日期算法之外,如果没有 WHERE
子句中的子查询,您的查询将更易于阅读。将摘要移动到 FROM
子句很容易:
SELECT DISTINCT b.vertrek, b.reiscode, r.bestemming, r.dagen, r.prijs
FROM boekingen b INNER JOIN
reizen r
ON b.reiscode = r.reiscode CROSS JOIN
(SELECT MIN(vertrek) as minv, MAX(vertrek) as maxv
FROM boekingen
WHERE reiscode = 'JH10'
) bm
WHERE b.reiscode <> 'JH10' AND
b.vertrek BETWEEN DATEADD(day, -1, minv) and DATEADD(day, 1, minv) AND
b.vertrek BETWEEN DATEADD(day, -1, maxv) AND DATEADD(day, 1, maxv)
ORDER BY b.vertek;