SQL Server中如何将Current_Timestamp存储为YYYY-MM-DD hh:mm:ss格式?
首先得打破一个关键误解:SQL Server里的datetime、datetime2这类日期时间类型,根本不存储你看到的那种“显示格式”。它们在数据库底层是用数值(比如datetime是两个4字节整数,分别存日期和时间偏移)来存储的,你看到的"Feb 22 2018 5:07PM"或者"YYYY-MM-DD hh:mm:ss",只是客户端工具(比如SQL Server Management Studio)或者查询时格式化后的展示效果,不是存储的内容本身。
那你为啥会看到"Feb 22 2018 5:07PM"呢?大概率是你的客户端工具(比如SSMS)的默认显示格式设置问题,或者你查询的时候没有指定格式化方式。
接下来给你几个具体的解决方向:
1. 调整客户端工具的显示格式(以SSMS为例)
如果你只是希望在SSMS里查看时默认显示成"YYYY-MM-DD hh:mm:ss"格式,可以这么改:
- 打开SSMS,点击顶部菜单的「工具」→「选项」
- 展开「环境」→「国际设置」
- 在「日期和时间格式」下拉框里选择「yyyy-MM-dd HH:mm:ss」(或者类似的符合你需求的格式)
- 重启SSMS后生效
这样你再查看表数据时,日期时间列就会默认显示成你想要的格式了。
2. 查询时指定格式化输出
如果需要在查询结果里得到特定格式的字符串,不要直接查日期列,用CONVERT或者FORMAT函数来转换:
- 用
CONVERT(性能更好,适合SQL Server所有版本):
SELECT CONVERT(VARCHAR(19), YourDateTimeColumn, 120) AS FormattedDateTime FROM YourTable;
这里的120是SQL Server预定义的格式代码,对应"yyyy-MM-dd HH:mm:ss"。
- 用
FORMAT(更灵活,SQL Server 2012及以上支持):
SELECT FORMAT(YourDateTimeColumn, 'yyyy-MM-dd HH:mm:ss') AS FormattedDateTime FROM YourTable;
3. 不推荐:存储为字符串类型(谨慎使用)
如果你非要把日期时间以字符串形式存储成"YYYY-MM-DD hh:mm:ss"(非常不推荐,因为会失去日期时间类型的所有优势:比如无法直接做日期运算、索引效率低、容易出现格式错误),那你需要把列类型改成VARCHAR(19)或者NVARCHAR(19),然后插入/更新时转换格式:
UPDATE YourTable SET YourStringColumn = CONVERT(VARCHAR(19), GETDATE(), 120) WHERE YourCondition;
但再次强调:这种做法是下下策,除非有特殊业务强制要求,否则强烈建议使用datetime/datetime2等原生日期时间类型。
总结一下:你之前的问题根源是混淆了存储值和显示格式,SQL Server不会存储格式,只存储日期时间的实际值,你看到的格式都是展示层的问题,调整客户端设置或者查询时格式化就能解决。
内容的提问来源于stack exchange,提问作者Progolfer79

