• Dynamics CRM日期字段查询使用时分秒的方法


    本人微信公众号:微软动态CRM专家罗勇 ,回复293或者20190110可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me 。

    我们使用高级查找对日期字段进行筛选的时候,你会发现无法写入时分秒,即使你下载下来,强行加上是时分秒,也是无效的,转换成SQL的时候只保留日期部分。

    <fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>
      <entity name='incident'>
        <attribute name='title' />
        <attribute name='incidentid' />
        <filter type='and'>
          <condition attribute='createdon' operator='on' value='2019-01-03' />
        </filter>
      </entity>
    </fetch>

    上面的FetchXml执行的话(不论通过SOAP终结点还是Web API终结点),转成T-SQL(假设调用用户的时区是东八区),转换后其实是createdon大于等于1月2日16:00:00,且小于1月3日16:00:00 。

    那么有没有办法精确到时分秒进行查询呢?

    答案是有,且听我道来。

    对于使用fetchxml来执行查询,可以将日期字段的筛选符号改成大于、大于或等于、小于、小于或等于,这样就会有效,例如下面的fetchxml,注意日期要转换成文本,使用 yyyy-MM-dd HH:mm:ss 格式。

    <fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>
          <entity name='incident'>
            <attribute name='title' />
            <attribute name='incidentid' />
            <filter type='and'>
              <condition attribute='createdon' operator='ge' value='2019-01-02 09:00:00' />
              <condition attribute='createdon' operator='lt' value='2019-01-04 08:00:00' />
            </filter>
          </entity>
     </fetch>

    上面的FetchXml执行的话(不论通过SOAP终结点还是Web API终结点),转成T-SQL(假设调用用户的时区是东八区),转换后其实是createdon大于等于1月2日01:00:00,且小于1月3日00:00:00 。

    如果我用Web API终结点,使用ODATA语法来做,也可以使用大于、大于或等于、小于、小于或等于这样的运算符号,类似如下的查询:

    https://demo.luoyong.me/api/data/v8.2/incidents?$select=incidentid&$filter=createdon ge 2019-01-02T09:00:00.000Z

    上面的查询执行,转成T-SQL其实是createdon大于等于1月2日09:00:00 。

    如果我使用QueryExpression呢?

    经过测试也可以对日期时间类型字段使用大于、大于或等于、小于、小于或等于的操作符,不论你传入的时间是带时区的时间还是UTC时间,生成的SQL都会将你传入的时间转换成UTC时间进行比较。

    下面是总结时间:

    1. 对日期时间类型字段使用大于(gt)、大于或等于(ge)、小于(lt)、小于或等于(le)的操作符,这样可以按照时分秒进行查询

    2.SOAP终结点,执行FetchmXml,会认为你传入的时间(文本类型)是执行用户偏好时区的时间,计算时会将你传入的时间转换成UTC 0时区时间进行计算,注意使用FetchXml的日期时间要使用 yyyy-MM-dd HH:mm:ss 这种格式。当然如果你使用QueryExpression时候传入的就是时间,而不是文本,会转换成UTC 0时区时间进行计算。

    3.Web API终结点,如果是执行FetchXml,其行为和SOAP终结点一样,会将你传入的时间认为是执行用户所偏好时区的时间,计算时会将你传入的时间转换成UTC 0时区时间进行计算。若是使用ODATA风格的话,则会认为你传入的时间就是UTC 0时区的时间,不执行转换。注意日期时间用这种风格:2019-01-02T09:00:00.000Z

  • 相关阅读:
    Objective-C Runtime 运行时之四:Method Swizzling
    App启动加载广告页面思路
    关于CoreData和SQLite多线程访问时的线程安全问题
    HIVE学习(待更新)
    流处理环境搭建
    CAJ2PDF
    ArcMap加载在线地图
    学习opencv(持续更新)
    风险和策略(待更新)
    区块链入门教程(转)
  • 原文地址:https://www.cnblogs.com/luoyong0201/p/Dynamics_365_Datetime_Query_Hour_Minute_Second.html
Copyright © 2020-2023  润新知