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

使用SSMS创建SQL表时,如何存储dd-mm-yyyy等指定格式日期?

关于SQL Server日期存储格式的问题解答

核心结论:没法在建表时指定DATE类型的存储格式

SQL Server里的DATE/DATETIME等日期类型,本质是用内部数值(比如从基准日期开始的累计天数)存储日期逻辑值的,根本不存在“存储格式”一说。你在SSMS里看到的2022-06-01只是客户端默认的展示格式,和实际存储的内容完全无关。


具体说明和解决方案:

  1. 绝对不推荐把日期存成带格式的字符串
    如果你强行把ORDERDATE改成VARCHAR(10)类型,插入时直接写'01-06-2022'或'01/06/2022',确实能存成你要的格式,但会彻底丢掉日期类型的所有优势:

    • 没法直接做日期加减、范围查询(比如查6月份的所有订单)
    • 排序会按字符串规则乱序,比如01-10-2022会排在02-06-2022前面
    • 无法校验日期合法性,容易存入32-13-2022这种无效值
      这种做法完全不可取。
  2. 正确姿势:存储用DATE,展示时转换格式
    继续用DATE类型存储日期,在需要展示的时候转换格式即可,你已经用到了正确的方法,再补充几种常用写法:

    • 转成dd-mm-yyyy格式:
      SELECT CONVERT(VARCHAR(10), ORDERDATE, 103) AS ORDER_DATE FROM BILL
      
    • 转成dd/mm/yyyy格式:
      -- 替换分隔符的方式(性能较好)
      SELECT REPLACE(CONVERT(VARCHAR(10), ORDERDATE, 103), '-', '/') AS ORDER_DATE FROM BILL
      -- 用FORMAT函数(语法更直观,但大数据量查询时性能不如CONVERT)
      SELECT FORMAT(ORDERDATE, 'dd/MM/yyyy') AS ORDER_DATE FROM BILL
      
  3. 临时修改SSMS的默认显示格式(不影响存储)
    如果你只是想在SSMS里默认看到dd-mm-yyyy格式,可以修改客户端设置:

    • 打开SSMS的「工具」->「选项」
    • 找到「环境」->「国际设置」,将默认语言改为支持该格式的语言(比如英语(英国))
    • 重启SSMS后,DATE类型列就会默认显示为对应格式

你的建表和插入语句说明

你的建表语句是最优写法,DATE类型完全符合需求。插入时用'20220601'这种无格式的日期字符串是SQL Server推荐的写法,能避免因语言/区域设置导致的日期解析错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:12:47