首页 > 解决方案 > SSMS 按日期时间字段过滤数据

问题描述

我有一个日期时间字段“createdDTTM”,格式为 2009-07-27 15:22:57.427

我想通过应用从 2019 年 1 月 1 日到 2019 年 1 月 31 日的过滤器来提取数据。

我已经尝试了我所知道的一切。Cast、Convert、Date 有各种组合,但一切都变得无效。

我试过以下代码:

SELECT p.fullname,
       p.dateofbirth,
       po.enterprisemrn,
       pro.FullName,
       o.OrderName,
       o.createdDTTM,
       o.WherePerformed,
       o.OrderNumberEXT,
       a.LocationName,
       a.apptnumberEXT,
       OrderStatus
FROM report.AHS_Order o
     JOIN report.AHS_Provider pro ON o.OrderingProviderID = pro.ID
     JOIN report.AHS_Patient p ON p.ID = o.PatientID
     JOIN report.AHS_Appointment a ON a.PatientID = p.ID
     JOIN report.AHS_Patient_Iorg pio ON pio.personID = p.ID
     JOIN report.AHS_Patient_Other po ON po.id = p.ID
WHERE p.IsInactiveFLAG = 'N'
  AND p.IsDeceasedFLAG = 'N'
  AND p.LastName <> 'test'
  AND p.LastName <> 'allscripts'
  AND o.OrderStatus = 'Active'
   OR o.OrderStatus = 'Complete'
  AND pio.OrganizationName LIKE '%starling%'
   OR o.OrderStatus = 'In Progress'
   OR o.OrderStatus = 'Need Information'
  AND o.OrderType = 'L'
  AND CONVERT(date, o.createdDTTM) > CONVERT(date, '20190101');

我也尝试过 Cast(), Dateadd(dd,.....),我不知道其他的。

有人可以建议 where 子句中的代码模式是什么错误吗?

在此处查看日期列图像:在此处 输入图像描述

标签: sqlsql-server

解决方案


如果 o.createdDTTM 是日期时间字段,那么这应该可以工作

SELECT p.fullname,
       p.dateofbirth,
       po.enterprisemrn,
       pro.FullName,
       o.OrderName,
       o.createdDTTM,
       o.WherePerformed,
       o.OrderNumberEXT,
       a.LocationName,
       a.apptnumberEXT,
       OrderStatus
FROM report.AHS_Order o
     JOIN report.AHS_Provider pro ON o.OrderingProviderID = pro.ID
     JOIN report.AHS_Patient p ON p.ID = o.PatientID
     JOIN report.AHS_Appointment a ON a.PatientID = p.ID
     JOIN report.AHS_Patient_Iorg pio ON pio.personID = p.ID
     JOIN report.AHS_Patient_Other po ON po.id = p.ID
WHERE p.IsInactiveFLAG = 'N'
  AND p.IsDeceasedFLAG = 'N'
  AND p.LastName <> 'test'
  AND p.LastName <> 'allscripts'
  AND o.OrderStatus = 'Active'
   OR o.OrderStatus = 'Complete'
  AND pio.OrganizationName LIKE '%starling%'
   OR o.OrderStatus = 'In Progress'
   OR o.OrderStatus = 'Need Information'
  AND o.OrderType = 'L'

  AND (o.createdDTTM >= '2019-01-01 00:00:00' AND o.createdDTTM <='2019-01-31 23:59:59');

推荐阅读