日期:2014-05-17  浏览次数:20545 次

date类型null值默认成1900-1-1
我的数据库,插入数据,date类型的,我想插入空值,但他默认会变为1900-1-1,有什么方法可以显示为空值吗?

------解决方案--------------------

if OBJECT_ID('tb') is not null drop table tb
go
create table tb(id int,dd date)
insert into tb(id,dd)
select 1,'2013-09-26' union all
select 2,null
go
select * from tb
go
drop table tb
go
/**
(2 行受影响)
id          dd
----------- ----------
1           2013-09-26
2           NULL

(2 行受影响)
*/

不会出现的说的情况嘛。
如果你想把你现有的数据为1900-01-01的显示为空,可以使用下面语句,不过这个不能区分到底是系统默认还是你个人写入。

select dd2=(case dd when '1900-01-01' then '' else dd end) from tb

------解决方案--------------------
我用1楼的代码试了,也不会变成1900-01-01,楼主你的代码拿出来看看?
------解决方案--------------------
时间字段就是这样 其实你没必要显示为空 在引用的时候注意一下就可以了
------解决方案--------------------
楼主的意思是这样。

create table [tb]([id] INT ,[times] datetime DEFAULT null)
insert [tb]
select 1,'2013-09-26'

------解决方案--------------------
引用:
我的数据库,插入数据,date类型的,我想插入空值,但他默认会变为1900-1-1,有什么方法可以显示为空值吗?


对比下ID=2和ID=3的,看看你的需求
if OBJECT_ID('tb') is not null drop table tb
go
create table tb(id int,dd datetime default null)
insert into tb(id,dd)
select 1,'2013-09-26' union all
select 2,'' union all
select 3,null
go
select * from tb
go
drop table tb
go
/**
id          dd
----------- -----------------------
1           2013-09-26 00:00:00.000
2           1900-01-01 00:00:00.000
3           NULL

(3 行受影响)
*/

------解决方案--------------------
isnull(xx,'')
------解决方案--------------------
你前端不输入任何东西的情况下,你把你的SQL拼成第三种情况嘛,你现在的SQL语句是第二种情况。也就是如果前端不输入任何东西,你就查一个null进去,而不是''
------解决方案--------------------
写个触发器。在表新增修改的时候。如果那个字段是""  就 update 为null  
因为在insert 时  如果插入的不是null 就会默认为最初日期
而且插入的null 必须不是字符null
------解决方案--------------------
update table1
set date1=null
------解决方案--------------------
我通常是在前端处理的,在拼SQL语句时,先判断值是不是空字符串,如果不是空字符串,就用这个值,如果是空字符串,就用null。
------解决方案--------------------
你的语句是什么写的?如果插入空值,它就是空值,如果不你插入,有可能是默认值&nbs