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
- Oracle sql语句查询日期字段没有时分秒问题
- hibernate使用原生sql查询Hibernate原生SQL多表查询字段名重复问题以及解决方法
- 关于Oracle字段类型Date使用mybatis generator自动生成工具出现的查询日期只精确到年月日问题
- excel内一键进行sql查询(使用方法 1.选择’需要进行sql查询区域 包括字段名 2 输入sql语句 3.选择输出数据的单元格)
- sql查询,日期字段包含年月日时分秒,如何按日统计
- 数据表中查询日期字段为空的记录并进行赋值的方法
- MySQL中int类型的字段使用like查询方法
- Hql语句中使用distinct关键字查询多个字段后以对象形式返回的方法
- 在sql server里,日期字段按天数进行group by查询的方法
- thinkphp的M方法可以直接使用模型类进行查询,而模型类名字要与数据表对应,模型类中字段不需要写
- MyBatis使用@MapKey注解接收多个查询记录到Map中,以便方便地用get()方法获取字段的值
- 使用Ajax中的Json传输数据时,从后台查询的字段过滤方法。
- jQeury的日期时分秒生成器插件,使用jQuery的匿名函数,静态方法的使用
- 使用MyBatis查询int类型字段,返回NULL值时报异常的解决方法
- 使用Mybatis查询,返回时间数据没有时分秒 解决方法
- hibernate按时间段查询带时分秒日期的方法
- hibernate按时间段查询带时分秒日期的方法
- Oracle查询某个字段的第一个字为汉字的查询方法
- 关于ASP.NET“操作必须使用一个可更新的查询”问题的解决方法
- 数据库-学生选课系统实例(关系查询的使用方法)