sql-server 是否为早于今天的日期打印TRUE?

vltsax25  于 2022-10-31  发布在  其他
关注(0)|答案(1)|浏览(199)

这是关于日期比较的。我无法设计出一个对所有日期在今天之前的行返回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,这应该是真的,但这不是真的。
我希望我快到了。

rvpgvaaj

rvpgvaaj1#

对于WFD_AttText5(假设这是格式为dd.mm.yy的str日期)小于当前日期的每一行,此查询将返回'TRUE'。对于其他行,它将返回'FALSE'。

SELECT
    WFD_AttText5,
    CASE
        WHEN CONVERT(DATE,WFD_AttText5,4) < CONVERT(DATE,GETDATE()) THEN 'TRUE' -- 4 stands for dd.mm.yy format
        ELSE 'FALSE'
    END AS [Match]
FROM WFElements
WHERE WFD_DTYPEID = 83

如果您只需要'TRUE'值,则类似于:

SELECT
    WFD_AttText5,
    'TRUE' AS [Match]
FROM WFElements
WHERE
    WFD_DTYPEID = 83
    AND CONVERT(DATE,WFD_AttText5,4) < CONVERT(DATE,GETDATE())

其他提示:在EXISTS中,始终使用SELECT 1
您的第一个查询可以重写为

SELECT 
    'TRUE' AS [Match]
FROM WFElements
WHERE
    WFD_DTYPEID = 83
    AND CONVERT(DATE,WFD_AttText5,4) = CONVERT(DATE,GETDATE())

相关问题