在SQL Server中将文本转换为日期时发生意外错误

在SQL Server中将文本转换为日期时发生意外错误,sql,sql-server,Sql,Sql Server,将年、月和日的int值转换为日期值时出现问题 从零件中选择日期(b.安装年,b.发货月,b.发货日) 我已经找到了问题的解决方案,发现当天的某些值为0。但我很好奇为什么事情会以某种方式运作 从零件中选择日期(2005年4月b日) 出于测试目的,我设置了固定的年和月值。把1,3,5,7,8,10,12作为一个月,在管理工作室运行,我可以看到结果。值:2、4、6、9和11导致以下错误: 无法构造数据类型date,某些参数的值无效 有人知道为什么某些值起作用而其他值不起作用吗?这可能是因为“天”值

将年、月和日的int值转换为日期值时出现问题

从零件中选择日期(b.安装年,b.发货月,b.发货日)
我已经找到了问题的解决方案,发现当天的某些值为0。但我很好奇为什么事情会以某种方式运作

从零件中选择日期(2005年4月b日)
出于测试目的,我设置了固定的年和月值。把1,3,5,7,8,10,12作为一个月,在管理工作室运行,我可以看到结果。值:2、4、6、9和11导致以下错误: 无法构造数据类型date,某些参数的值无效


有人知道为什么某些值起作用而其他值不起作用吗?

这可能是因为“天”值是31,而那些月份没有31天

datefromparts()
仅构造有效日期

这不是很容易解决的,因为
datefromparts()
没有“try\ux”版本

这里有一种方法:

select coalesce(try_convert(date, concat(2005, '-', 4, '-', b.shipm_day)),
                try_convert(date, concat(2005, '-', 4, '-', b.shipm_day - 1)),
                try_convert(date, concat(2005, '-', 4, '-', b.shipm_day - 2)),
                try_convert(date, concat(2005, '-', 4, '-', b.shipm_day - 3))
               )

这可能是因为“日”值为31,而这些月份没有31天

datefromparts()
仅构造有效日期

这不是很容易解决的,因为
datefromparts()
没有“try\ux”版本

这里有一种方法:

select coalesce(try_convert(date, concat(2005, '-', 4, '-', b.shipm_day)),
                try_convert(date, concat(2005, '-', 4, '-', b.shipm_day - 1)),
                try_convert(date, concat(2005, '-', 4, '-', b.shipm_day - 2)),
                try_convert(date, concat(2005, '-', 4, '-', b.shipm_day - 3))
               )

可能是因为您试图解析一些不存在的其他日期(如4月31日或2月30日)。失败输入列表中的一条重要线索:“9月9日、4月4日、6月6日和11月11日过去了30天……诸如此类……2月2日)。”可能是因为您试图解析一些不存在的其他日期(如4月31日或2月30日。失败输入列表中的一条重要线索:“9月9日、4月4日、6月6日和11月11日过去了30天……等等……2月2日)。”