首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DateAdd /conversion

DateAdd /conversion
EN

Stack Overflow用户
提问于 2018-04-28 00:56:48
回答 2查看 145关注 0票数 0

通过这个简单的查询工作

代码语言:javascript
复制
SELECT dateadd(d,-13,Period_DateEnd) Period
FROM ReportingPeriod_tbl

一旦我添加到一个更大的查询中,我就会得到一个转换错误,而且我不知道任何人都能提供帮助。

“从字符字符串转换日期和/或时间时,转换失败。”

代码语言:javascript
复制
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 
EN

回答 2

Stack Overflow用户

发布于 2018-04-28 01:04:00

您的字符串日期时间格式有问题。

示例:

代码语言:javascript
复制
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

希望能帮助你:)

新问题:

更改查询:

代码语言:javascript
复制
SELECT 
    dateadd(d,-13,Period_DateEnd) Period
FROM ReportingPeriod_tbl

代码语言:javascript
复制
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

演示和结果:

票数 0
EN

Stack Overflow用户

发布于 2018-04-28 08:46:52

请使用此方法避免异常,并找出格式不正确的条带:

代码语言:javascript
复制
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日?)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50071829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档