通过这个简单的查询工作
SELECT dateadd(d,-13,Period_DateEnd) Period
FROM ReportingPeriod_tbl一旦我添加到一个更大的查询中,我就会得到一个转换错误,而且我不知道任何人都能提供帮助。
“从字符字符串转换日期和/或时间时,转换失败。”
SELECT PeriodEnding FROM
(
SELECT format(WeekEnd,'d-MMM-yy') PeriodEnding
FROM WeekEnd_tbl WHERE WeekEnd <= (SELECT TOP 1 WeekEnd FROM WeekEnd_tbl A WHERE A.IsCurrentWeek = 1)
UNION ALL
SELECT
format(Period_DateEnd,'MMM-yy') Period
FROM ReportingPeriod_tbl WHERE ReportingPeriod_ID <= (SELECT TOP 1 ReportingPeriod_ID FROM ReportingPeriod_tbl A
WHERE Period_DateEnd >= (SELECT TOP 1 WeekEnd FROM WeekEnd_tbl A WHERE A.IsCurrentWeek = 1 ORDER BY WeekEnd))
UNION ALL
SELECT
dateadd(d,-13,Period_DateEnd) Period
FROM ReportingPeriod_tbl WHERE ReportingPeriod_ID <= (SELECT TOP 1 ReportingPeriod_ID FROM ReportingPeriod_tbl A
WHERE Period_DateEnd >= (SELECT TOP 1 WeekEnd FROM WeekEnd_tbl A WHERE A.IsCurrentWeek = 1 ORDER BY WeekEnd))
) Period 发布于 2018-04-28 01:04:00
您的字符串日期时间格式有问题。
示例:
select dateadd(d,-13,'2018/04/28 12:00:00.000') --fine be ok
select dateadd(d,-13,convert(datetime,'2018/04/28 12:00:00.000')) --fine be ok
select dateadd(d,-13,'04/28') --Conversion failed when converting date and/or time from character string希望能帮助你:)
新问题:

更改查询:
SELECT
dateadd(d,-13,Period_DateEnd) Period
FROM ReportingPeriod_tbl至
SELECT
dateadd(d,-13,
SUBSTRING(Period_DateEnd, 7, 4)
+'/'+SUBSTRING(Period_DateEnd, 4, 2)
+'/'+SUBSTRING(Period_DateEnd, 1, 2)
+SUBSTRING(Period_DateEnd, 11, 13)
) Period
FROM ReportingPeriod_tbl演示和结果:

发布于 2018-04-28 08:46:52
请使用此方法避免异常,并找出格式不正确的条带:
SELECT
[Period] = dateadd(d, -13, try_convert(datetime, [Period_DateEnd]))
,[Err_message] = iif(try_convert(datetime, [Period_DateEnd]) is null, 'Failed to convert string {' + [Period_DateEnd] + '} to datetime', null)
FROM
[ReportingPeriod_tbl];完整查询:https://pastebin.com/3PPpkf2t
还有一件事:你必须在任何地方都有相同的日期时间格式。为什么?因为03/01/08。2008年3月1日、2008年1月3日或2003年1月8日?)
https://stackoverflow.com/questions/50071829
复制相似问题