如何批量修改SQL表smalldatetime列的日期格式为yyyy-dd-MM mm:ss
解决SQL中smalldatetime日期显示格式转换问题
首先明确:smalldatetime类型的字段本身不存储格式,它存储的是日期时间的数值,你看到的yyyy-MM-dd HH:mm只是客户端(比如SQL Server Management Studio)的默认显示样式,并非数据本身的格式。所以根本不需要修改表中的每一行数据,只需在查询时指定你要的显示格式即可。
给你两种常用实现方式:
1. 查询时直接转换格式(推荐)
用FORMAT函数可以自定义输出格式,直接得到你要的yyyy-dd-MM HH:mm:
SELECT FORMAT(your_datetime_column, 'yyyy-dd-MM HH:mm') AS 格式化日期 FROM your_table;
如果是SQL Server 2012之前的版本,FORMAT函数不支持,可改用CONVERT配合字符串替换:
SELECT STUFF(CONVERT(VARCHAR(16), your_datetime_column, 120), 9, 2, SUBSTRING(CONVERT(VARCHAR(16), your_datetime_column, 120), 6, 2)) AS 格式化日期 FROM your_table;
这段代码逻辑是先转成yyyy-MM-dd HH:mm格式,再交换日和月的位置。
2. 不推荐的方式:新增字段存储格式化后的字符串
如果你非要把格式“固定”在表中(非常不建议,会丢失日期类型的所有优势),可以新增字符串类型字段,批量写入格式化后的值:
- 先添加字段:
ALTER TABLE your_table ADD 格式化日期 VARCHAR(16);
- 再批量更新:
UPDATE your_table SET 格式化日期 = FORMAT(your_datetime_column, 'yyyy-dd-MM HH:mm');
⚠️ 注意:这种方式会让后续的日期筛选、排序、运算变得非常麻烦,还会浪费存储空间,除非有特殊需求,否则不推荐这么做。
内容的提问来源于stack exchange,提问作者Danny
相关产品推荐
相关产品推荐

