各位大哥大姐请教一下sql数据库中的时间类型用nvarchar好还是datetime好啊?用datetime是不是有点麻烦啊?
æ¥ææ¶é´ç±»åï¼
timeï¼
æ ¼å¼ï¼hh:mm:ss[.nnnnnnn]
èå´ï¼00:00:00.0000000 å°23:59:59.9999999
精确度ï¼100 纳ç§
åå¨å¤§å°ï¼ä»¥åè为åä½ï¼ï¼3-5
ç¨æ·å®ä¹çç§çå°æ°ç²¾åº¦ï¼æ
æ¶åºå移éï¼æ
dateï¼
æ ¼å¼ï¼YYYY-MM-DD
èå´ï¼0001-01-01 å° 9999-12-31
精确度ï¼1天
åå¨å¤§å°ï¼ä»¥åè为åä½ï¼ï¼3
ç¨æ·å®ä¹çç§çå°æ°ç²¾åº¦ï¼æ
æ¶åºå移éï¼æ
smalldatetimeï¼
æ ¼å¼ï¼YYYY-MM-DD hh:mm:ss
èå´ï¼1900-01-01 å° 2079-06-06
精确度ï¼1åé
åå¨å¤§å°ï¼ä»¥åè为åä½ï¼ï¼4
ç¨æ·å®ä¹çç§çå°æ°ç²¾åº¦ï¼æ
æ¶åºå移éï¼æ
datetimeï¼
æ ¼å¼ï¼YYYY-MM-DD hh:mm:ss[.nnn]
èå´ï¼1753-01-01 å° 9999-12-31
精确度ï¼0.00333ç§
åå¨å¤§å°ï¼ä»¥åè为åä½ï¼ï¼8
ç¨æ·å®ä¹çç§çå°æ°ç²¾åº¦ï¼æ
æ¶åºå移éï¼æ
datetime2ï¼
æ ¼å¼ï¼YYYY-MM-DD hh:mm:ss[.nnnnnnn]
èå´ï¼0001-01-01 00:00:00.0000000 å°9999-12-31 23:59:59.9999999
精确度ï¼100é ç§
åå¨å¤§å°ï¼ä»¥åè为åä½ï¼ï¼6 å° 8
ç¨æ·å®ä¹çç§çå°æ°ç²¾åº¦ï¼æ
æ¶åºå移éï¼æ
datetimeoffsetï¼
æ ¼å¼ï¼YYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm
èå´ï¼0001-01-01 00:00:00.0000000 å°9999-12-31 23:59:59.9999999ï¼ä»¥UTC æ¶é´è¡¨ç¤ºï¼
精确度ï¼100é ç§
åå¨å¤§å°ï¼ä»¥åè为åä½ï¼ï¼8 å°10
ç¨æ·å®ä¹çç§çå°æ°ç²¾åº¦ï¼æ
æ¶åºå移éï¼æ
如按时间排序,数据库类型校验,根据时间段查询,根据时间的分组统计等等方面造成的影响比较大
追问:
如果用datetime
我的MyEclipse用Hibernate转换时是timestamp类型的
在用模糊查询查时间时有点纠结啊
老是报不能转换的错误
回答:
用hibernate啊
那你在配置文件注入类型不用时间戳
改成这个试试java.util.Date
补充:
hibernate项目好几年没做过了
原来在数据库时间建模和操纵时习惯用java.sql.Timestamp与数据库中DateTime对应,但业务流通层,模型里还是用java.util.Date
因为这些时间直接的转换都是一样的方便,而且这样做逻辑理解上比较直观
记忆中是没有出现过错误,Timestamp在现在使用数据源时经常使用
追问:
知道用date类型的哇
但是hibernate自动生成的就是timestamp类型
不改配置文件
就用timestamp怎么做啊?总不能每次生成就改一次配置文件吧.....
追问:
还有我做的是模糊查询
在form里面时间又是string类型的
转换有点麻烦
回答:
你在createSQLQuery方法后面在使用
addScalar方法传入你datetime的实体对应名和hibernate类型试一下吧
补充:
这个的确比较麻烦,你可以写个公共转换方法进行转换
就是字符串根据你的时间格式进行取出时间long
然后转换就可以了
大概这样子
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat();