这是关于日期比较的。我无法设计出一个对所有日期在今天之前的行返回TRUE的查询。
我有一个查询,如果今天的日期与包含这些日期的列中的行值匹配,则返回TRUE。
SELECT
CASE WHEN EXISTS
(
SELECT WFD_AttText5, WFD_AttText1
FROM WFElements
WHERE WFD_DTYPEID = 83
)
THEN 'TRUE'
ELSE 'FALSE'
END AS 'Match'
FROM WFElements
WHERE WFD_DTYPEID = 83 AND WFD_AttText5 IN
(
SELECT
FORMAT (
GETDATE(), 'dddd, dd.MM.yy', 'de-de')
FROM WFElements
)
如果一个日期与今天的日期匹配,那么返回TRUE。但是如何对所有小于今天的行返回TRUE呢?我认为我的问题是我必须使用IN(),而不能同时使用〈。
EDIT:此查询效果更好,但在打印TRUE时并不总是正确的:
SELECT
WFD_AttText5
AS 'Datum Formularfeld',
FORMAT
(
GETDATE
(), 'dddd, dd.MM.yy', 'de-de') AS 'TODAY formattiert',
'TRUE' AS [Match]
FROM WFElements
WHERE
WFD_DTYPEID = 83
AND WFD_AttText5 < FORMAT
(
GETDATE
(), 'dddd, dd.MM.yy', 'de-de')
这将给出正确的结果(德语),例如:
- 2022年5月25日,中部|弗赖塔格,2022年10月28日|正确 *
意思是:密特沃赫,25.05.22〈弗赖塔格,28.10.22,这是真的。
但也有错误的:
- 2022年12月30日,弗雷塔格|弗赖塔格,2022年10月28日|正确 *
意思是:Freitag,30.12.22小于Freitag,28.10.22,这应该是真的,但这不是真的。
我希望我快到了。
1条答案
按热度按时间rvpgvaaj1#
对于WFD_AttText5(假设这是格式为dd.mm.yy的str日期)小于当前日期的每一行,此查询将返回'TRUE'。对于其他行,它将返回'FALSE'。
如果您只需要'TRUE'值,则类似于:
其他提示:在
EXISTS
中,始终使用SELECT 1
您的第一个查询可以重写为