如何将nvarchar类型日期转为YYYY-MM-DD格式?去除T00:00
问题描述
我正在尝试将nvarchar类型的日期字段转换为日期类型,但无论使用何种方法,结果始终带有T00:00。我希望避免使用substring或trim函数,能否通过convert或cast实现?目前我尝试了以下代码:
CONVERT(VARCHAR, DATEFIELD, 120) CAST (DATEFIELD as DATE)
但两种方法返回的结果都包含T00:00,我想去掉这部分。我试过很多示例,但都没有效果。
解决方案
首先要理清两个核心点:
- DATE类型本身不含时间部分:你用
CAST(DATEFIELD AS DATE)得到的结果,数据存储层面只有年/月/日信息,显示出T00:00是查询工具(比如SSMS、应用程序)为兼容ISO格式自动补充的,并非数据本身携带。如果只是要确保字段类型为日期,这个转换是完全正确的,无需纠结显示后缀。 - 如果要直接返回不带时间的字符串格式(如
yyyy-mm-dd),可以通过CONVERT指定对应格式代码实现,完全不需要substring或trim:
推荐写法是先将nvarchar转成DATE类型(避免格式解析错误),再转成目标格式的字符串:
-- 输出 yyyy-mm-dd 格式的字符串 CONVERT(VARCHAR(10), CAST(DATEFIELD AS DATE), 23)
如果你的nvarchar字段本身是标准日期格式(如yyyy-mm-dd或yyyy/mm/dd),也可以直接转换:
CONVERT(VARCHAR(10), DATEFIELD, 23)
为什么之前的写法无效?
CONVERT(VARCHAR, DATEFIELD, 120)使用的格式代码120对应yyyy-mm-dd hh:mi:ss(24h),会强制带上时间部分(原字段无时间则补00:00:00),部分客户端会把空格替换成T,从而出现T00:00。CAST(DATEFIELD AS DATE)本身没有问题,只是显示设置导致的后缀。如果用SSMS,可以通过「工具→选项→查询结果→SQL Server→结果到网格」调整「日期和时间显示格式」,改为仅显示日期。
常用日期格式代码参考:
- 23:
yyyy-mm-dd(符合ISO标准,推荐使用) - 101:
mm/dd/yyyy - 102:
yyyy.mm.dd
内容的提问来源于stack exchange,提问作者eddeveloper
相关产品推荐
相关产品推荐

