Sybase中字段格式为datetime,时间怎么总是自动设置为1900-01-01 00.00.00.0?

时间:2021-02-01 15:32:18
Sybase中字段格式设置为datetime,
如果录入的时候如果只输入年月日,数据库自动加上00:00:00.0
如果录入的时候不输入数据,时间自动设置为1900-01-01 00.00.00.0
如何让Sybase把这该死的自动处理去掉?

11 个解决方案

#1


你应该判断传给他的是""还是null吧

#2


判断了有什么用?而且我输入的时候如果有数据,比如是"2004/10/22",那么插入数据库后的数据就成了"2004/10/22 00:00:00.0",何解?

#3


datetime的好象就这样子的吧。有什么影响吗?

#4


另外,我把数据库取出来的时间转换成字符串,然后用substring方法取其中的小时之后的为什么不行?

String strtime = "2004/10/22 00:00:00.0";
String strtime1 = strtime.substring(11,10);
out.println(strtime1);

这样本应该输出"00:00:00.0",可是输出的怎么是空值?

#5


这个没关系的吧,sybase中所有没有年月日的时间都是默认为1900-01-01 
你觉得它很难看?? 就算你看不到它,它也会在那的
你可以只取出其中的时分秒的啊

你说取出来的为什么是空值,我不知道,我想不是数据库的原因吧,不过看你的意图好像是想取其中的时分秒,这样:CONVERT(CHAR(8),GETDATE(),8)
你写一个sql:SELECT CONVERT(CHAR(8),GETDATE(),8) 用sql工具试一下,取出来的就是当前时间完整的时分秒

#6


在数据库一般都不用datetime作为时间类型,一般都是用varchar作为时间类型

#7


To jeah(阿杰哥):
感谢回复!
不过有一点需要说明,我截取的是数据库中已有的datetime类型的字段内容,不是当前时间。

#8


我建议你用varchar作为时间类型,不要用datetime,如果你的字符串格式跟datetime的一样的话,sybase可以把它当成时间来作一些处理,而不一定要用datetime,例如你某个varchar类型字段的的值是'12:00:00',你可以当他是时间类型的来作一些例如比较时间大小之类的操作

#9



查询请看:
select convert(char(10),getdate(),102)  结果:2004.10.22
select convert(char(10),getdate(),112)  结果:20041022

#10


我用substring(11)就把第11个字符开始后边的部分取出来了,内容就是小时、分、秒、毫秒。

以前没仔细看substring的说明。

#11


(1)如果录入的时候如果只输入年月日,数据库自动加上00:00:00.0
推荐解决方案:在建表中列的时候,可以考虑使用SQL语句直接建立。同时,在写该列类型时,写为Date即可。
(2)如果录入的时候不输入数据,时间自动设置为1900-01-01 00.00.00.0
推荐解决方案:出现这种情况时,我认为应该是你建立该表中列时,选择了其他默认值。只要默认为NULL即可。
(3)String strtime = "2004/10/22 00:00:00.0";
String strtime1 = strtime.substring(11,10);
out.println(strtime1);
这样本应该输出"00:00:00.0",可是输出的怎么是空值?

如果说,你所取的字符串是从数据库表的列(列类型为DateTime)中得到的,并且你往该列录入数据时,并没有录入时间。那么,你从数据库中取出的字符串,应该是不会带时间的。但是,如果你用PB所带的“DataBase”画板检索该列的数据时,显示的确实如你所讲为“2004/10/22 00:00:00.0”。你若用程序取这个列的值,取到的就是“2004/10/22”。故输出的才会是空值。

仅提供此方法,且为本人个人观点,仅供参考,不保证正确啊。

#1


你应该判断传给他的是""还是null吧

#2


判断了有什么用?而且我输入的时候如果有数据,比如是"2004/10/22",那么插入数据库后的数据就成了"2004/10/22 00:00:00.0",何解?

#3


datetime的好象就这样子的吧。有什么影响吗?

#4


另外,我把数据库取出来的时间转换成字符串,然后用substring方法取其中的小时之后的为什么不行?

String strtime = "2004/10/22 00:00:00.0";
String strtime1 = strtime.substring(11,10);
out.println(strtime1);

这样本应该输出"00:00:00.0",可是输出的怎么是空值?

#5


这个没关系的吧,sybase中所有没有年月日的时间都是默认为1900-01-01 
你觉得它很难看?? 就算你看不到它,它也会在那的
你可以只取出其中的时分秒的啊

你说取出来的为什么是空值,我不知道,我想不是数据库的原因吧,不过看你的意图好像是想取其中的时分秒,这样:CONVERT(CHAR(8),GETDATE(),8)
你写一个sql:SELECT CONVERT(CHAR(8),GETDATE(),8) 用sql工具试一下,取出来的就是当前时间完整的时分秒

#6


在数据库一般都不用datetime作为时间类型,一般都是用varchar作为时间类型

#7


To jeah(阿杰哥):
感谢回复!
不过有一点需要说明,我截取的是数据库中已有的datetime类型的字段内容,不是当前时间。

#8


我建议你用varchar作为时间类型,不要用datetime,如果你的字符串格式跟datetime的一样的话,sybase可以把它当成时间来作一些处理,而不一定要用datetime,例如你某个varchar类型字段的的值是'12:00:00',你可以当他是时间类型的来作一些例如比较时间大小之类的操作

#9



查询请看:
select convert(char(10),getdate(),102)  结果:2004.10.22
select convert(char(10),getdate(),112)  结果:20041022

#10


我用substring(11)就把第11个字符开始后边的部分取出来了,内容就是小时、分、秒、毫秒。

以前没仔细看substring的说明。

#11


(1)如果录入的时候如果只输入年月日,数据库自动加上00:00:00.0
推荐解决方案:在建表中列的时候,可以考虑使用SQL语句直接建立。同时,在写该列类型时,写为Date即可。
(2)如果录入的时候不输入数据,时间自动设置为1900-01-01 00.00.00.0
推荐解决方案:出现这种情况时,我认为应该是你建立该表中列时,选择了其他默认值。只要默认为NULL即可。
(3)String strtime = "2004/10/22 00:00:00.0";
String strtime1 = strtime.substring(11,10);
out.println(strtime1);
这样本应该输出"00:00:00.0",可是输出的怎么是空值?

如果说,你所取的字符串是从数据库表的列(列类型为DateTime)中得到的,并且你往该列录入数据时,并没有录入时间。那么,你从数据库中取出的字符串,应该是不会带时间的。但是,如果你用PB所带的“DataBase”画板检索该列的数据时,显示的确实如你所讲为“2004/10/22 00:00:00.0”。你若用程序取这个列的值,取到的就是“2004/10/22”。故输出的才会是空值。

仅提供此方法,且为本人个人观点,仅供参考,不保证正确啊。