select cast('' as datetime)/*
-----------------------
1900-01-01 00:00:00.000(1 行受影响)
*/
-----------------------
1900-01-01 00:00:00.000(1 行受影响)
*/
解决方案 »
- 关于选择第m-n条数据的问题.
- 关于SQL远程连接出错
- 关于access2000的,我有一个access表,删除了其中一个表之后,文件大小居然没变,怎么回事?
- 在SQL SERVER的查询分析器里面怎么用SQL语言操作ODBC(OPENLINK)数据源里面的数据库?谢谢
- 关于SQL Server 2000中的问题
- 向高手请教一个有关创建WINDOWS98下SQL SERVER的ODBC遇到的问题.
- SQL Server的某个表,有几个用户都有权限操作,如何查看被谁修改过?
- 冰天雪地果体跪求一语句,老师等着要的,谢谢。
- 求助 无法绑定由多个部分组成的标识符
- SQL Server Management Studio能不能设置代理服务器?
- 问一个查询语句 有点难度(在线等)
- 打开端口问题
, cast(nullif('','') as datetime)
, isnull(cast(nullif('','') as datetime),getdate())/*
----------------------- ----------------------- -----------------------
1900-01-01 00:00:00.000 NULL 2009-02-25 17:18:15.140(1 行受影响)*/
可以创建表定义字段时定义缺省时间create table (...t datetime default 自定义时间...)
相当于存储两个偏移量。1900-1-1的基准值加上两个偏移量,就是存储的日期值,也即两4字节存放的int数。当你给datetime类型赋值为''时,因为datetime内部存储的原因,实际上是给int型数据赋值,''转换为int为0
可以理解为dateadd(dd,0,'1900-1-1')
见4楼,nullif('','')将''转换成NULL,正常值不变
set @date=''
select cast(nullif(@date,'') as datetime)set @date='20090225'
select cast(nullif(@date,'') as datetime)/*
-----------------------
NULL(1 行受影响)
-----------------------
2009-02-25 00:00:00.000(1 行受影响)
*/