SQL中FORMAT函数转换datetime为dd-mm-yyyy格式出错的原因及解决方法
日期格式化异常问题解答
问题原因
在SQL Server的FORMAT函数中,格式符的大小写有明确区分:
- 小写
mm代表分钟(你的日期时间是00:00:00,所以取到分钟值00) - 大写
MM才代表月份
你写的格式串'dd-mm-yyyy'误用了小写mm,因此得到错误结果25-00-2014。
解决方案
有两种可靠方式得到正确的dd-mm-yyyy格式:
方式1:修正FORMAT函数的格式串
将小写mm替换为大写MM:
DECLARE @datetime DATETIME = '2014-08-25 00:00:00.000' SELECT FORMAT (@datetime, 'dd-MM-yyyy')
执行后会返回预期的25-08-2014。
方式2:使用CONVERT函数(不受语言环境影响)
如果不需要自定义格式的灵活性,可直接用CONVERT函数配合固定样式码105(对应dd-mm-yyyy格式):
DECLARE @datetime DATETIME = '2014-08-25 00:00:00.000' SELECT CONVERT(VARCHAR(10), @datetime, 105)
该方式无需依赖系统语言,结果同样为25-08-2014。
内容的提问来源于stack exchange,提问作者Eseosa Omoregie
相关产品推荐
相关产品推荐

