数据库中 日期的几种表示方法

说白了,MySQL中存储日期的数据类型选择挺关键的。
先说最重要的,Date类型就是纯日期,没有时间信息,格式是“YYYY-MM-DD”,范围从“1 000-00-00”到“9 9 9 9 -1 2 -3 1 ”。
另外一点,Datetime类型和Timestamp都包含日期和时间,但Datetime没有时区信息,而Timestamp会根据服务器时区自动转换。
还有个细节挺关键的,如果你用字符串存储日期,虽然简单,但效率低,空间占用大,还容易出错。

我一开始也以为字符串存储方便,后来发现不对,尤其是在做时间计算和比较时,字符串存储真的很坑。
等等,还有个事,如果你用Datetime类型,时区变化可能导致时间显示错误,这个点很多人没注意。

所以,我的建议是,尽量使用Date或Timestamp类型,根据需要选择合适的格式,避免使用字符串存储日期。
你觉得呢?有没有遇到过因为日期存储错误导致的问题?

数据库里时间什么格式

最常用的是YYYY-MM-DDHH:MM:SS格式,符合ISO8 6 01 标准。
这个格式啥意思?就是年月日时分秒都写全了。
比如2 02 3 -04 -01 1 2 :3 4 :5 6 ,就是2 02 3 年4 月1 日中午1 2 点3 4 分5 6 秒。

还有YYYY-MM-DD格式。
这个就只有日期,没时间。
比如2 02 3 -04 -01 ,就是4 月1 号。

或者HH:MM:SS格式。
这个只有时间,没日期。
比如1 2 :3 4 :5 6 ,就是中午1 2 点3 4 分5 6 秒。

还有YYYY-MM-DDTHH:MM:SS格式。
这也是ISO8 6 01 标准,日期和时间用T隔开。
比如2 02 3 -04 -01 T1 2 :3 4 :5 6 ,意思同上。

还有YYYYMMDDHHMMSS格式。
这个把年月日时分秒连在一起,中间没分隔符。
比如2 02 3 04 01 1 2 3 4 5 6 ,意思同上。

其他格式就多了。
比如自定义格式,看数据库怎么设计。
建议用标准格式,好交换好兼容。
时区问题要注意。
跨地域应用要特别小心。

你具体用哪种?

SQL 日期函数如何格式化日期?

哎哟喂,你这总结写得真够详细的啊,直接照搬官方文档的感觉。
不过咱唠点实在的,你这么罗列下来,我反而不太确定了,你到底想表达个啥?是想让我背这些函数名和格式符啊?还是想提醒我别把MySQL的%符号用成Oracle的YYYY?
我自己踩过的坑是,之前在小组项目里,有个哥们儿用Oracle的TO_CHAR,结果隔壁用SQLServer的同事直接就懵了,还以为他代码写错了。
最后还是我过去手把手教,说你看你这YYYY-MM-DD是Oracle的,SQLServer得用yyyy-MM-dd,这小写大写还有横竖杠的差别可大了去了。

所以你看,光知道函数名和格式符还不够,还得知道数据库间的具体差异。
你非要说"根据实际使用的数据库选择对应函数",这话说得轻巧,真到了写代码的时候,各种细节问题就来了。

比如MySQL的DATE_FORMAT(NOW(), '%Y-%m-%d'),这没问题对吧?但你要是碰上Oracle的TO_CHAR(SYSDATE, 'YYYY-MM-DD'), 你能保证不会把参数顺序搞反?还有SQLServer的CONVERT和FORMAT,虽然都能用,但转换风格和性能还真不一样,这得根据具体需求来权衡。

反正你看着办吧,我还在想这个问题...