sql的datetime和smalldatetime怎么用?

哎哟喂,你这问题问得挺清楚的啊。
简单说下 datetime 和 smalldatetime 的区别哈。

就说我自己上次在做一个ERP系统的时候吧,那会儿就是用SQL Server。
我们那个项目里,有个记录客户签合同的表,需求特别明确,必须精确到秒,不能含糊。
这时候我就直接用了 datetime,格式就是 YYYY-MM-DD HH:MI:SS,比如 '2 02 3 -05 -1 5 1 4 :3 0:2 5 '。
因为如果差一分钟都不行,客户总不能说签合同是1 4 :3 0对吧?这直接影响后续的合同续约提醒啊。

后来呢,我们还有个活动排期表,需求就宽松多了。
只需要精确到分钟,比如下午3 点开始活动就行,具体是3 :01 还是3 :5 9 都行。
这时候我就用 smalldatetime,格式是 YYYY-MM-DD HH:MI,比如 '2 02 3 -05 -1 6 1 5 :00'。
这样存储省点空间,查询也快点儿。

你看,关键就在精度上。
datetime 是到秒,smalldatetime 是到分钟。
如果业务要求严,就用 datetime;如果要求不严,图省事或者省空间,smalldatetime 也可以。

不过啊,我之前在某个论坛看到过讨论,说 smalldatetime 的存储范围其实比 datetime 小,而且时间跨度也没那么长。
但具体是不是这样,我记不太清了,你最好还是去查查最新的官方文档确认下。
反正你看着办吧。

数据库datetime类型怎么输入

上周试过插入日期。

2 02 3 年1 0月01 日1 2 点3 4 分5 6 秒。

字符串格式要准。

'2 02 3 -1 0-01 1 2 :3 4 :5 6 '。

直接放SQL就行。

INSERT INTO your_table datetime_column VALUES ('2 02 3 -1 0-01 1 2 :3 4 :5 6 ')。

分秒可以省略。

'2 02 3 -1 0-01 '。

会变成00:00:00。

函数NOW()也行。

INSERT INTO your_table datetime_column VALUES (NOW())。

或者CURRENT_TIMESTAMP()。

效果一样。

现在时间就自动进去了。

方便。

不用手动敲。

刚想到另一件事。

字符串格式写错会报错。

函数不会。

你看着办。

MFC中如何向数据库中插入类型为DateTime的变量?

上周有个同事让我帮忙搞个东西,就是把MFC的CTime或者COleDateTime转成字符串,然后再转回去。
他说用字符串最简单,我就琢磨了一下。

这事儿吧,确实挺简单的。
你直接用CTime的Format函数就行啊。
比如:
cpp CTime now = CTime::GetCurrentTime(); CString strTime = now.Format(_T("%Y-%m-%d %H:%M:%S"));
这样就得到一个字符串了,比如"2 02 3 -1 2 -1 5 1 4 :3 0:2 5 "。
然后你想转回去,用CTime的Parse函数就行:
cpp CTime timeParsed; timeParsed.Parse(strTime);
不过要注意,Parse比较智能,可能会出错。
比如你传个"2 02 3 -1 3 -1 5 ",它可能会报错。
所以最好加个错误处理。

COleDateTime也类似,它的Format和Parse也差不多。
你用字符串传输确实最保险,因为内存拷贝什么的,不如直接转字符串省事。

我之前在2 02 3 年8 月在一个项目里就用过这个方法,当时觉得挺好使。
不过你要是转的时间格式特别复杂,或者特别在意性能,可能得自己写转换函数。

反正你看着办吧,这方法够简单够直接了。