我有一个批处理代码表,其中包含用于标记某些日期段的代码。但是,有些日期在管理表中没有条目。对于这些,我想在表格中使用年份为'9999'的默认值。但是,当我尝试更改年份时,我收到转换错误。
我可以从下面的代码中获取正确的值,我似乎无法在实际查询中使用它。
/* Works */
DECLARE @Date date
SET @Date = '2015-09-20'
SELECT CAST('9999' + '-' + CAST(MONTH(@Date) AS varchar) + '-' + CAST(DAY(@Date) AS varchar) AS date)
从字符串转换日期和/或时间时转换失败。
/* Conversion error */
SELECT
EndDate,
CASE
WHEN (SELECT BatchCd FROM BatchCodeMGMT WHERE Orders.EXITDATE BETWEEN BatchStartDt AND BatchEndDt AND RegionBInd = 0 ) IS NULL THEN
(SELECT BatchCd FROM BatchCodeMGMT WHERE --We set the year to the default year which is 9999 and compare them going backwards
CONVERT(date,('9999' + '-' +
CAST(MONTH(Orders.EndDate) AS varchar) + '-' +
CAST(DAY(Orders.EndDate) AS varchar)
))
BETWEEN BatchStartDt AND BatchEndDt AND AdultEdInd = 0 )
ELSE
(SELECT BatchCd FROM BatchCodeMGMT WHERE Orders.EXITDATE BETWEEN BatchStartDt AND BatchEndDt AND AdultEdInd = 0 )
END BatchCd
FROM Orders
批处理代码表或多或少是这样的,所有列也是非空的。因此,对于“2013-09-15”订单中的日期,我希望将其更改为“9999-09-15”并使用它从表格中挑选批次代码。
-------------------------------------
|BatchCd | BatchStart | BatchEnd |
-------------------------------------
| Pr2 | 9999-01-16 | 9999-06-14 |
| Pr1 | 9999-06-15 | 9999-01-15 |
| Pr2 | 2015-01-16 | 2015-06-14 |
| Pr1 | 2015-06-15 | 2015-08-15 |
-------------------------------------
编辑:我发现当重叠日期时可能存在潜在问题。但是这个表不应该发生。
答案 0 :(得分:0)
您可能需要准确告诉convert命令如何格式化数据。它看到#### - ## - ##,但它没有看到说明它是yyyy-mm-dd的说明。请看这里的表格:https://msdn.microsoft.com/en-us/library/ms187928.aspx
这将为您提供有效的日期格式。也许你将不得不改变你格式化的方式,或者你只需要告诉它你正在使用什么格式。