SQL中使用CONVERT函数转换字段日期格式不生效问题咨询
问题原因与解决方法
出现这个现象的核心原因是il.DepartureStation字段本身不是原生日期/时间类型,大概率是用varchar/nvarchar等字符串类型存储的日期值:
CONVERT函数做日期格式化的前提是,传入的待转换值是日期类型。GETDATE()本身返回原生datetime类型值,所以执行CONVERT(varchar,getDate(),0)时,函数会读取你传入的样式参数0,按规则输出19 june 2022 10.30AM格式的结果。- 当你传入的
il.DepartureStation是字符串类型时,CONVERT不会直接触发日期格式化逻辑,会先走隐式类型转换把字符串转成datetime,再按datetime转varchar的默认规则输出,你传入的样式参数0会被直接忽略,最终返回你看到的2022-09-21 22:20:00.0格式结果。
你确实需要先把il.DepartureStation显式转换为日期类型,再做格式处理,不要依赖隐式转换。
标准写法参考:
-- 确认字段内日期值格式规范、无脏数据时用这个 CONVERT(varchar, CAST(il.DepartureStation AS datetime), 0)
如果字段内可能存在不符合日期格式的脏数据,建议用TRY_CAST避免转换报错中断查询,转换失败的记录会返回NULL:
CONVERT(varchar, TRY_CAST(il.DepartureStation AS datetime), 0)
额外提醒:不建议用字符串类型存储日期类数据,后续做格式转换、范围计算、排序时很容易出现隐式转换问题,还可能因为存入不规范的脏数据导致查询报错。
内容的提问来源于stack exchange,提问作者sThirumagal93
相关产品推荐
相关产品推荐

