尝试使用通过FORMAT函数创建的列作为WHERE子句中的日期

Trying to use column which is created with FORMAT function to be a date in WHERE clause

提问人:MariaT 提问时间:11/13/2023 最后编辑:Thom AMariaT 更新时间:11/13/2023 访问量:63

问:

我有一个表,其中一列是用FORMAT函数创建的。我有一个日期时间列,但我只想要日期,所以我做了什么:

FORMAT(hug2.Slots.DateStart, 'd', 'en-gb') AS 'DateStart'

我可以看到列类型是 nvarchar(4000)。 我正在尝试在WHERE子句中使用这一列,我所追求的是:

WHERE DateStart >= 01/09/2023

但我的结果包括 DateStart 小于指定日期 01/09/2023 的记录。

我试过写:

WHERE DateStart >= '01/09/2023'

WHERE DateStart >= 2023-09-01

WHERE DateStart >= 01-09-2023

WHERE DateStart > FORMAT(01/09/2023, 'd', 'en-gb') 

整个代码块是:

SELECT r.Reference, r.flag_batch_ready,
    CASE 
        WHEN p.Tenure IS NULL THEN r.Tenure
        ELSE p.Tenure
    END AS 'Property_Tenure',
    mxspr.Status AS 'Max_Survey_Status',
    CASE
        WHEN r.GSEHousePlanUploaded IS NULL THEN 'No'
        WHEN r.GSEHousePlanUploaded = 0  THEN 'No'
        WHEN  r.GSEHousePlanUploaded = 1 THEN 'Yes'
        ELSE 'to check'
    END AS 'HP_uploaded',
    mxspr.DateStart

FROM hug2.ReferralUpdates r

    LEFT JOIN hug2.max_survey_status_per_ref mxspr
        ON r.Reference = mxspr.Reference

    LEFT JOIN hug2.max_propertyId_per_ref p
        ON r.Reference = p.Reference

WHERE mxspr.DateStart > '01/09/2023'

没有任何东西返回我想要的结果。

AZURE-SQL-DATABASE

评论

4赞 Thom A 11/13/2023
使用明确的日期格式。我建议一个.此外,作为旁注,是 s 的表达式;它将导致值 。日期文字需要用单引号 () 引起来。yyyyMMdddate01-09-2023int-2031'
2赞 Alan Schofield 11/13/2023
如果原始列是日期时间,那么您可以将其转换为 where 子句,如下所示WHERE CAST(myOriginalColum as Date) > CAST('20230901' as Date)
0赞 HABO 11/13/2023
为什么你会期望算术对你的意图敏感? 并且看起来很容易计算,但结果可能不是您想要与日期进行比较的结果。另请注意,当字符串包含无法正常排序的日期时,按字母顺序比较字符串可能没有帮助,例如 大于 。如果您只想要一个日期,则使用日期,也许可以作为计算列01/09/20232023-09-01'10/10/2010''01/01/2020'
0赞 Thom A 11/14/2023
OP 最好为此写作,@AlanSchofield.myOriginalColumn >= '20230902'
0赞 Alan Schofield 11/14/2023
@ThomA,这是真的,我想我在想它是否是当时,并且原始列包含有效时间(不包括 00:00:00)=>=

答: 暂无答案