You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MSSQL Server执行Select *时如何统一设置所有日期字段输出格式

MSSQL Server SELECT * 全局统一日期输出格式解答

核心结论

MSSQL 原生不支持在 SELECT * 查询场景下直接强制所有日期字段统一输出格式,底层逻辑如下:

  • 日期类字段(date/datetime/datetime2/smalldatetime等)属于二进制存储的数值类型,本身不存在固定的存储格式,只有在转换为字符串类型输出时才会涉及格式化规则
  • SELECT * 默认返回字段的原生数据类型,最终的日期展示格式由接收查询结果的客户端(比如SSMS、业务应用代码)决定,而非SQL Server服务端控制

可行实现方案

方案1:调整客户端展示格式(最简便,无需修改查询语句)

如果仅需要在查看结果时展示为CCYY-MM-DD格式,直接修改客户端配置即可,不需要调整SQL逻辑:

  • 若使用SSMS查看结果:打开「工具」→「选项」→「查询结果」→「SQL Server」,分别修改「以文本格式显示结果」和「以网格格式显示结果」中的日期格式配置为yyyy-MM-dd,配置生效后所有SELECT *返回的日期字段都会按目标格式展示
  • 若在业务应用中接收查询结果:直接在应用层统一配置日期序列化规则为yyyy-MM-dd即可,是生产环境的最优选择

方案2:动态SQL自动生成带格式化的查询语句(无需手动枚举所有列)

如果必须在SQL服务端直接返回格式化后的字符串类型日期值,不需要手动逐个指定列名,可以用动态SQL自动拼接查询语句,示例代码如下:

DECLARE @TargetTableName SYSNAME = '替换为你要查询的表名'
DECLARE @QuerySql NVARCHAR(MAX)

-- 自动拼接字段,日期类字段统一转成yyyy-MM-dd格式
SELECT @QuerySql = COALESCE(@QuerySql + ', ', 'SELECT ') +
    CASE 
        WHEN t.name IN ('date', 'datetime', 'datetime2', 'smalldatetime', 'datetimeoffset')
        THEN 'CONVERT(VARCHAR(10), ' + QUOTENAME(c.name) + ', 23) AS ' + QUOTENAME(c.name)
        ELSE QUOTENAME(c.name)
    END
FROM sys.columns c
INNER JOIN sys.types t ON c.system_type_id = t.system_type_id
WHERE c.object_id = OBJECT_ID(@TargetTableName)
ORDER BY c.column_id

SET @QuerySql = @QuerySql + ' FROM ' + QUOTENAME(@TargetTableName)

-- 执行最终生成的查询
EXEC sp_executesql @QuerySql

说明:代码中CONVERT函数的第三个参数23是SQL Server内置的格式码,对应输出格式就是yyyy-MM-dd(即要求的CCYY-MM-DD),输出长度固定为10字符,完全匹配需求。

注意事项

  • 生产环境不建议滥用动态SQL方案,日期格式化属于展示层逻辑,放到应用端处理更合理,也不会损失日期类型的原生操作能力
  • 动态SQL方案仅推荐用于临时查询场景,避免手动枚举大量列名的麻烦

内容的提问来源于stack exchange,提问作者Tan Rezaei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 23:15:03