SQL Server 2008+:SSMS中能否通过开关选项统一显示DATE列为短日期?
关于SQL Server中自动显示短日期格式的解决方案
嘿,这个需求我太懂了——每次用SELECT *查一堆表,还要挨个找日期列转格式确实麻烦!不过得先给你明确说:SQL Server并没有像SET ANSI_NULLS那样的全局查询开关,能直接让所有DATE列自动以短日期(无时间)格式显示。原因是这类显示格式的控制更多属于客户端(比如SSMS)的渲染逻辑,而非数据库引擎的查询行为开关。
不过别担心,有几个实用的替代方案能帮你解决这个问题:
1. 调整SSMS的全局显示设置(最省心)
这是最适合你频繁用SELECT *的方案,一次设置永久生效:
- 打开SSMS,点击顶部菜单栏的「工具」→「选项」
- 在弹出的窗口里,依次展开「环境」→「查询结果」→「SQL Server」,然后选择你常用的结果模式(「结果到网格」或「结果到文本」)
- 找到「日期和时间格式」选项,选择你需要的短日期格式(比如
yyyy-MM-dd就是常见的短日期格式) - 点击确定后,后续所有查询里的DATE(甚至DATETIME)列都会自动以你设置的短日期格式显示,完全不用手动转换!
2. 给常用表创建视图(针对性解决)
如果只是特定几张表需要频繁查询,建个视图封装格式转换会更灵活:
CREATE VIEW vw_YourTableName AS SELECT -- 保留所有其他列,只转换日期列 *, CONVERT(VARCHAR(10), YourDateColumn1, 23) AS FormattedDate1, CONVERT(VARCHAR(10), YourDateColumn2, 23) AS FormattedDate2 -- 把表中所有DATE/DATETIME列都按这种方式转换 FROM YourTableName;
之后你只需要执行SELECT * FROM vw_YourTableName,就能直接看到格式化后的日期列了。要是觉得原列名冲突,也可以把原列排除,只保留格式化后的列。
补充说明
顺便提一句:SQL Server的DATE类型本身是只存储日期部分的,没有时间信息——如果你看到查询结果里带时间,大概率是列类型是DATETIME或DATETIME2,这时候上面的两种方案同样适用。
内容的提问来源于stack exchange,提问作者marx
相关产品推荐
相关产品推荐

