SQL中的日期格式如何设置?

记得上次帮隔壁老王调试系统,他那个老式数据库日期格式搞得我一头雾水。
他用的是SQL Server 2 008 R2 ,跑在Win7 机器上。
具体是2 009 年3 月1 5 日,他需要改成YYYY-MM-DD格式。
那时候我坐在他的小办公室,窗外阳光正好,他桌上那杯已经凉掉的咖啡还剩半杯。
我打开Management Studio,那个图标是蓝色的,带着SQL Server的Logo。
新建查询,他手把手教过我,但就是记不住那个CONVERT函数的参数。
最后我查了网上的文档,发现1 01 是US English的MM/DD/YYYY,而他需要的是1 02 于是我把SQL语句改成了SELECT CONVERT(VARCHAR(1 0), '2 009 -03 -1 5 ', 1 02 ) AS formatted_date。
他那边执行结果很快出来了,'2 009 -03 -1 5 ',完美。
他说他终于能导出报表了。
等等,还有个事,他后来跟我说,其实他同事用的是SQL Server 2 01 6 ,格式转换好像更简单,直接CAST就行。
我突然想到,不同版本之间差异还挺大的。

MySQL日期格式转换 13位时间戳转YYYY-MM-DD的三种方案

说实话,这事儿吧,就那么点事儿。
1 3 位毫秒级时间戳转日期,核心就三步走。

第一步,先除以1 000。
为啥?因为MySQL里存储的时间戳默认是秒级的。
你那1 3 位数字,比如1 2 3 4 5 6 7 8 9 01 2 3 ,得先除以1 000变成秒级,变成1 2 3 4 5 6 7 8 9 0.1 2 3 4
第二步,用FROM_UNIXTIME函数。
这函数就是把秒级时间戳转成日期时间格式。
比如你输入1 2 3 4 5 6 7 8 9 0.1 2 3 4 ,它给你转出来就是某个具体时间点,比如'2 009 -02 -1 3 2 3 :3 1 :3 0'。

第三步,看你要啥格式。
你要'YYYY-MM-DD',就用DATE_FORMAT函数。
比如你选DATE_FORMAT(FROM_UNIXTIME(ts/1 000), '%Y-%m-%d'),结果就是'2 009 -02 -1 3 '。
简单直接。

另外注意几点:存储这1 3 位数字,字段得用BIGINT,别用INT,会溢出。
直接转成日期存的话,可能毫秒丢了,得用DATETIME(3 )保存毫秒。
时区也得注意,FROM_UNIXTIME默认用服务器时区,要是时间戳是UTC的,得用CONVERT_TZ转一下。

具体用哪个方案?看你要不要带时间部分。
要是需要,就用DATE_FORMAT。
只要日期,DATE函数就行。
显式类型转换的话,CAST或CONVERT也行,看个人习惯。

时间戳用起来吧,挺方便的。
比如分析用户活跃度,按天聚合数据。
或者算两个时间点差多少秒,比如用户在线时长。
直接用时间戳范围查询,效率也比字符串日期高。

就这些,没啥大不了的。

sql日期格式转换

上周。
你问的SQL日期转换。
用STR_TO_DATE和DATE_FORMAT。

STR_TO_DATE把字符串转日期。
比如'2 02 3 -09 -2 5 '。
格式是'%Y-%m-%d'。
SELECT STR_TO_DATE('2 02 3 -09 -2 5 ', '%Y-%m-%d') AS date_value;
DATE_FORMAT把日期转字符串。
比如当前时间。
格式是'%Y-%m-%d %H:%i:%s'。
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') AS formatted_date;
格式字符串很重要。
用错就转错。
数据库系统可能不一样。
还是看官方文档靠谱。

你看着办。