在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题)
原文:在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题)
所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。
关于日期条件出现的奇怪问题。
http://bbs.csdn.net/topics/390498925
select top 1 ekeyid,ProbeMaterial,Result,LabTestDate from PatientLabTestResults
where ProbeMaterial='Ca'
and LabTestDate between convert(datetime,2013/1/1) and
convert(datetime,'2013/6/24') order by LabTestDate desc
这样查的出结果,变成
select top 1 ekeyid,ProbeMaterial,Result,LabTestDate from PatientLabTestResults
where ProbeMaterial='Ca'
and LabTestDate between convert(datetime,2013/1/1) and
convert(datetime,2013/6/24) order by LabTestDate desc
这样后就查不出结果了,其实只是去除了2013/6/24的'号而已,这个大家能理解是什么问题吗?
-
if OBJECT_ID('t') is not null
-
drop table t
-
go
-
-
create table t(d datetime)
-
-
-
insert into t
-
select cast('2013-05-01' as datetime) as d
-
union all
-
select cast('2013-05-10' as datetime)
-
-
-
/*
-
1.
-
-
通过查询计划能看出,SQL Server把下面的查询转化成了:
-
-
select * from t where d >= convert(datetime,2013/5/1,0) and d <= convert(datetime,'2013/6/24',0)
-
-
也就是查询条件:
-
d >= convert(datetime,2013/5/1,0) and d <= convert(datetime,'2013/6/24',0)
-
-
进一步转化:
-
d >= '1901-02-07 00:00:00.000' and d <= 2013-06-24 00:00:00.000
-
-
这样就能查询出结果集。
-
*/
-
select *
-
from t
-
where d between convert(datetime,2013/5/1) and convert(datetime,'2013/6/24')
-
-
-
-
/*
-
2.
-
-
通过查询计划能看出,SQL Server把下面的查询转化成了:
-
-
select * from t where d >= convert(datetime,2013/5/1,0) and d <= convert(datetime,2013/6/24,0)
-
-
也就是查询条件:
-
d >= convert(datetime,2013/5/1,0) and d <= convert(datetime,2013/6/24,0)
-
-
进一步转化:
-
d >= '1901-02-07 00:00:00.000' and d <= '1900-01-14 00:00:00.000'
-
-
由于SQL Server 把2013/6/24中的斜杠,当成了除号,也就是按除法计算了,
-
比如:2013/6/24 就等于13,那么由于datetime默认值是默认值: 1900-01-01 00:00:00,
-
那么加上13后,就是1900-01-14 00:00:00.000,这样后就查不出结果了.
-
*/
-
select *
-
from t
-
where d between convert(datetime,2013/5/1) and convert(datetime,2013/6/24)
其实就是,
2013/5/1 就是一个除法运算,结果为402。
2013/6/24 做除法运算后,就是13。
由于datetime数据类型的默认值为:'1900-01-01 00:00:00',
所以上面的convert(datetime,2013/5/1)就是'1900-01-01 00:00:00' 再加上402,
就是'1901-02-07 00:00:00.000',
而convert(datetime,2013/6/24)就是是'1900-01-01 00:00:00' 再加上 13,
就是'1900-01-14 00:00:00.000',
所以就会查不出结果来。
所以,上面的2013/5/1 要写成 '2013/5/1',一定要加上引号。
在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题)的更多相关文章
- 在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时、分钟计算问题)
原文:在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时.分钟计算问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. ...
- 在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据)
原文:在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决 ...
- 在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列)
原文:在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
- 在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字)
原文:在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
- 在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存)
原文:在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...
- 在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题)
原文:在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉 ...
- 在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题)
原文:在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得 ...
- 在论坛中出现的比较难的sql问题:37(动态行转列 某一行数据转为列名)
原文:在论坛中出现的比较难的sql问题:37(动态行转列 某一行数据转为列名) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
- 在论坛中出现的比较难的sql问题:36(动态行转列 解析json格式字符串)
原文:在论坛中出现的比较难的sql问题:36(动态行转列 解析json格式字符串) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
随机推荐
- cv2.warpAffine 参数详解
本文链接:https://blog.csdn.net/qq878594585/article/details/81838260本文为作者原创文章,未经同意严禁转载! opencv中的仿射变换在pyth ...
- deepin常用软件列表
deepin常用软件列表 软件列表 Safe Eyes 视力保护程序 网址
- AndoridSQLite数据库开发基础教程(4)
AndoridSQLite数据库开发基础教程(4) 安装SQLiteManager 以下是SQLiteManager的安装步骤: (1)双击下载的.exe文件,弹出SQLiteManager Setu ...
- 在线http模拟工具
在线http模拟工具http://www.atool.org/httptest.php
- openresty开发系列11--openresty的api入门
openresty开发系列11--openresty的api入门 1)ngx_lua模块的hello world编辑nginx下conf配置文件nginx.conf# vi nginx.conf在se ...
- ISO/IEC 9899:2011 条款6.9——外部定义
6.9 外部定义 语法 1.translation-unit: external-declaration translation-unit external-declaration extern ...
- ISO/IEC 9899:2011 条款6.8.2——标签语句
6.8.2 复合语句 语法 1.compound-statement: { block-item-listopt } block-item-list: block-item block-i ...
- 基于spark logicplan的表血缘关系解析实现
随着公司平台用户数量与表数量的不断增多,各种表之间的数据流向也变得更加复杂,特别是某个任务中会对源表读取并进行一系列复杂的变换后又生成新的数据表,因此需要一套表血缘关系解析机制能清晰地解析出每个任务所 ...
- doris: shell invoke .sql script for doris and passing values for parameters in sql script.
1. background in most cases, we want to execute sql script in doris routinely. using azkaban, to l ...
- 【分布式一致性】etcd
etcd: https://jimmysong.io/kubernetes-handbook/concepts/etcd.html 什么是 分布式一致性: http://thesecretliveso ...
