首页 > 解决方案 > SQL Server:仅显示满足条件的值

问题描述

我试图弄清楚如何修改我的查询以仅显示满足条件的值。

我的查询:

SELECT
    name = r.RscMaster_Name_Ch
    ,Start_date = a.assign_from_da
    ,End_date = a.Assign_Thru_Da
FROM DW_WFTS.dbo.Assign_Tbl a
LEFT JOIN DW_WFTS.dbo.Resource_Master_Tbl r ON r.RscMaster_No_In = a.RscMaster_No_In
WHERE
    (
        a.Assign_Thru_Da >= GETDATE()
        OR a.Assign_Thru_Da IS NULL
        OR
        (
            a.Assign_From_Da >= GETDATE()
            AND a.Assign_Thru_Da >= GETDATE()
        )
        OR
        (
            a.Assign_From_Da <= GETDATE()
            AND a.Assign_Thru_Da <= GETDATE()
        )
    )
    AND
    (
        (
            a.Assign_From_Da LIKE '0%'
            OR a.Assign_From_Da LIKE '00%'
            OR a.Assign_From_Da LIKE '000%'
        )
        OR
        (
            a.Assign_Thru_Da LIKE '0%'
            OR a.Assign_Thru_Da LIKE '00%'
            OR a.Assign_Thru_Da LIKE '000%'
        )
    );

因此,如果有一个或多个用户的日期格式错误——任何输入为“0YYY”或“00YY”或“000Y”的年份——我希望查询显示名称和仅显示错误的日期,例如。

name       Start_date     end_date
John       0019-12-01
Jane                       0020-01-05
Mike       0019-01-05      0019-12-01 

我不确定如何从选择中省略正确的日期。请帮忙。

标签: sql-server

解决方案


如果你关心的只是当年的前导零

“任何输入为 '0YYY' 或 '00YY' 或 '000Y' 的年份”

并且它们是 type DATE,那么这将使您到达那里:

SELECT
    name = r.RscMaster_Name_Ch
    ,Start_date = a.assign_from_da
    ,End_date = a.Assign_Thru_Da
FROM DW_WFTS.dbo.Assign_Tbl a
LEFT JOIN DW_WFTS.dbo.Resource_Master_Tbl r ON r.RscMaster_No_In = a.RscMaster_No_In
where
    a.assign_from_da < '1000-01-01'
    or a.Assign_Thru_Da < '1000-01-01'

如果您有更多的日期规则,那么可以扩展 where 子句


推荐阅读