SQL SERVER日期格式转换详解

说白了,将数据库中的时间格式从yyyy-mm-ddhh:mm:ss转换为yyyy-mm-dd短日期格式其实很简单。
先说最重要的,你可以直接使用SQL Server的CONVERT函数,指定style值为1 2 0。
比如,如果你的时间字段叫your_datetime_column,转换的SQL语句就是:
sql SELECT CONVERT(VARCHAR, your_datetime_column, 1 2 0) AS short_date_format;
另外一点,style值1 2 0对应的是ISO 8 6 01 标准格式,即yyyy-mm-dd,这在大多数情况下都是适用的。
还有个细节挺关键的,style值2 0也会返回相同的格式,但2 0通常用于ODBC规范。

我一开始也以为只有特定的日期格式才能用style值转换,后来发现其实很多style值都可以根据需要调整输出格式。
等等,还有个事,如果你需要考虑时区,style值可能会更加复杂,这时候你可能需要结合其他函数或考虑时区转换。

总之,转换日期格式并不复杂,但要注意选择合适的style值,并根据实际需求调整。
这个点很多人没注意,但确实值得试试。

sqlserver 不同日期格式

哎哟,这SQL Server的日期时间类型,我当年刚接手一个项目的时候,真是头大。
那会儿是2 01 8 年,项目在杭州。
数据库里存的都是客户下单的时间,本来以为简单,结果发现有的是DATE,有的是DATETIME,还有的是DATETIME2 ,搞得查询的时候各种出错。

就拿DATE来说吧,就是'YYYY-MM-DD'这种格式,比如'2 02 3 -1 0-05 '。
一开始我写SQL的时候,直接用'2 02 3 -1 0-05 '去查,结果报错,说日期格式不正确。
后来才知道,得用参数化查询,或者写成'2 02 3 -1 0-05 '这种字面量,不然解析不了。

再来说TIME,就是'HH:MI:SS'这种格式,比如'1 4 :3 0:00'。
这个还好,没出什么幺蛾子。
但是有一次,我写了个存储过程,需要把系统当前时间存成TIME类型,结果发现TIME类型不支持毫秒,存进去的时间就变成了'1 4 :3 0:00',毫秒丢了。
那会儿真是烦死了,因为业务需求要精确到毫秒,最后只能改用DATETIME类型。

DATETIME类型就更复杂了,'YYYY-MM-DDHH:MI:SS'这种格式,比如'2 02 3 -1 0-05 1 4 :3 0:00'。
有一次,我写了个查询,需要把DATETIME类型的时间格式化成'MM/dd/yyyy',结果发现直接用SELECT语句格式化不了。
后来查了资料,才知道得用FORMAT函数,比如FORMAT(CURRENT_TIMESTAMP, 'MM/dd/yyyy'),这才解决了问题。

DATETIME2 (7 )类型就更精确了,'YYYY-MM-DDHH:MM:SS.fffffff'这种格式,比如'2 02 3 -1 0-05 1 4 :3 0:00.1 2 3 4 5 6 7 '。
这个我碰得比较少,因为业务需求一般不需要这么精确。
但是有一次,我接手一个国外项目,客户要求时间精确到微秒,结果就得用DATETIME2 (7 )类型。
那会儿真是头大,因为在国内项目里从没用过这么精确的时间类型。

DATETIMEOFFSET(7 )类型就更别提了,'YYYY-MM-DDHH:MM:SS+TZD'这种格式,比如'2 02 3 -1 0-05 1 4 :3 0:00+08 :00'。
这个我更没碰过,因为国内项目一般都用不了时区。
有一次,我接手一个跨国项目,客户要求存时间的时候得带时区,结果就得用DATETIMEOFFSET(7 )类型。
那会儿真是头疼,因为在国内项目里从没用过时区,最后只能请教了同事,才搞明白怎么用。

总的来说,SQL Server的日期时间类型挺多的,各种类型用处也不同。
当年我在杭州那个项目里,就是用得最多的DATE、TIME和DATETIME,偶尔用一下FORMAT函数格式化时间。
其他类型,比如DATETIME2 和DATETIMEOFFSET(7 ),我碰得比较少,因为业务需求一般没那么复杂。
不过,如果你接手的项目需要用到这些类型,那也得学学,不然真头疼。

sql中date类型怎么写

我记得有一次,我在做项目的时候,需要在数据库里存一组生日数据。
因为是生日,所以直接用到了DATE类型。
我当时想,如果有一天我忘记了自己或别人的生日,那不就可以直接从数据库里查到了嘛。
结果,在插入数据的时候,我竟然把年月日写成了2 02 3 -1 3 -01 ,结果系统直接给我报错了,告诉我“Invalid date '2 02 3 -1 3 -01 '”。
这才发现,月份只能是01 到1 2 啊,哈哈,真是一点都不给自己留余地呢。
然后,我赶紧修正了数据,事情才得以顺利进行。
等等,我还突然想到,那如果有人过生日那天正好是闰年的2 月2 9 日,那岂不是每年都要特别留意一下?

sql语句如何处理因日期格式不统一导致的查询结果错误 sql语句日期格式不统一的常见问题解决方法

日期格式不统一是常见坑。
直接用函数转换最简单。

MySQL用STR_TO_DATE()。
比如STR_TO_DATE('2 02 3 -01 -01 ', '%Y-%m-%d')。
要兼容多种格式就嵌套COALESCE。

SQL Server用CONVERT()或PARSE()。
CONVERT(DATE, '2 02 3 -01 -01 ', 1 2 0)是样式码1 2 0。
PARSE()更智能但需指定文化。

Oracle用TO_DATE()。
TO_DATE('2 02 3 -01 -01 ', 'YYYY-MM-DD')。

但注意:转换函数要写全所有格式。
只治已病,不治未病。

源头必须管住: 1 . 表设计用DATE/DATETIME 2 . 前端校验输入,必须是数字和有效日期 3 . 后端用参数化查询,传日期对象
比如Java用SimpleDateFormat。
Python用datetime.strptime()。

老数据乱?先用STR_TO_DATE()临时统一。

你自己掂量。