Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql e评论“上面的答案”,由于stackoverflow的性质,我们的答案四处浮动。我不希望我的答案被驳回,因为它超出了其他人的评论,即“上面的答案”有问题。:)您好,感谢您的帖子,,,我不知道为什么我会收到“从字符串转换日期和/或时间时转换失败”。当我尝试将_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql e评论“上面的答案”,由于stackoverflow的性质,我们的答案四处浮动。我不希望我的答案被驳回,因为它超出了其他人的评论,即“上面的答案”有问题。:)您好,感谢您的帖子,,,我不知道为什么我会收到“从字符串转换日期和/或时间时转换失败”。当我尝试将

Sql e评论“上面的答案”,由于stackoverflow的性质,我们的答案四处浮动。我不希望我的答案被驳回,因为它超出了其他人的评论,即“上面的答案”有问题。:)您好,感谢您的帖子,,,我不知道为什么我会收到“从字符串转换日期和/或时间时转换失败”。当我尝试将,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,e评论“上面的答案”,由于stackoverflow的性质,我们的答案四处浮动。我不希望我的答案被驳回,因为它超出了其他人的评论,即“上面的答案”有问题。:)您好,感谢您的帖子,,,我不知道为什么我会收到“从字符串转换日期和/或时间时转换失败”。当我尝试将此应用到主表时出错;(有什么想法吗?我把所有字段都定义为datatype Date。在SQL 2008 R2上运行时没有错误。我将用一个精选的示例更新我的帖子,也许这会对这个问题有所帮助。当我运行它时,从varchar到Date的最终转换是一个


e评论“上面的答案”,由于stackoverflow的性质,我们的答案四处浮动。我不希望我的答案被驳回,因为它超出了其他人的评论,即“上面的答案”有问题。:)您好,感谢您的帖子,,,我不知道为什么我会收到“从字符串转换日期和/或时间时转换失败”。当我尝试将此应用到主表时出错;(有什么想法吗?我把所有字段都定义为datatype Date。在SQL 2008 R2上运行时没有错误。我将用一个精选的示例更新我的帖子,也许这会对这个问题有所帮助。当我运行它时,从varchar到Date的最终转换是一个错误…不是查询的应用程序…在我的表中,我能够运行到我需要的位置。)t将日期转换为varchar,给我YYYY-M-DD,表示月份中只有一个数字的日期。这是否会导致在最后一步将其转换为日期格式时出现问题?我无法将其转换为日期格式。对于我提供的示例,我使用您的代码没有问题…我所有的日期字段也是数据类型date。@millhouse,请您验证一下莱恩:我的答案怎么了?我不明白你说的:“其他关于上述答案不正确的帖子是在页面上答案顺序不同时写的”@FLICKER我不是在评论你的答案。我是在评论一个不同的答案做出了评论“上述答案”由于stackoverflow的性质,我们的答案四处浮动。我不希望我的答案被驳回,因为它落在其他人的评论之上,即“上面的答案”有问题。:)
Birth_date     purchase_date    Birth_date_update
2002-02-21     2006-05-11       2007-02-21
2004-01-18     2004-01-25       2005-01-18
2011-07-24     2011-04-09       2011-07-24
2006-12-16     2007-10-08       2007-12-16
2007-04-30     2008-03-14       2008-04-30
update my_table
  set birth_date_update = case 
    when birth_date > purchase_date then birth_date -- Condition 1
    when birth_date < purchase_date then dateadd(year, datediff(year, birth_date, purchase_date), birth_date) -- Condition 2
    when dateadd(year, datediff(year, birth_date, purchase_date), purchase_date) < purchase_date  
      then dateadd(year, 1, dateadd(year, datediff(year, birth_date, purchase_date), purchase_date)) end -- Condition 3
create table TAB1 (BD date, PD date, BDU date)

insert into TAB1 values 
('2002-02-21',     '2006-05-11',       NULL),
('2004-01-18',     '2004-01-25',       NULL),
('2011-07-24',     '2011-04-09',       NULL),
('2006-12-16',     '2007-10-08',       NULL),
('2007-04-30',     '2008-03-14',       NULL)

;with cc as (
    select BD, PD,
        case 
            when BD > PD then BD
            when BD < PD then cast(cast(year(PD) as varchar) + '-' + cast(month(BD) as varchar) + '-' + cast(day(BD) as varchar) as date)
        end as BDU
    from TAB1
)
, cc2 as (
    select BD, PD, 
        case 
            when BDU < PD then dateadd(day, 365, BDU)
            else BDU
        end as BDU
    from cc
)
update T1
set BDU = cc2.BDU 
from TAB1 T1
    inner join cc2 on cc2.BD = T1.BD and cc2.PD = T1.PD

select * from TAB1
UPDATE dbo.BirthDateTable SET Birth_date_update =
CASE    WHEN Birth_date >= purchase_date THEN Birth_date -- Condition 1
        WHEN Birth_date < purchase_date
            THEN CASE
                WHEN CONVERT(Date  , CAST( DATEPART(YEAR,purchase_date) AS Varchar(4)) + '-' + CAST(DATEPART(MONTH,Birth_date) AS Varchar(2)) + '-' + CAST(DATEPART(DAY, Birth_date) AS Varchar(2))) > purchase_date 
                THEN CONVERT(Date  , CAST( DATEPART(YEAR,purchase_date) AS Varchar(4)) + '-' + CAST(DATEPART(MONTH,Birth_date) AS Varchar(2)) + '-' + CAST(DATEPART(DAY, Birth_date) AS Varchar(2))) -- Condition 2
                ELSE DATEADD(YEAR,1,CONVERT(Date  , CAST( DATEPART(YEAR,purchase_date ) AS Varchar(4)) + '-' + CAST(DATEPART(MONTH,Birth_date) AS Varchar(2)) + '-' + CAST(DATEPART(DAY, Birth_date) AS Varchar(2)))) -- Condition 3
                END
        END
SELECT
CASE    WHEN Birth_date >= purchase_date THEN Birth_date -- Condition 1
        WHEN Birth_date < purchase_date
        THEN CASE
             WHEN CONVERT(Date  , CAST( DATEPART(YEAR,purchase_date) AS Varchar(4)) + '-' + CAST(DATEPART(MONTH,Birth_date) AS Varchar(2)) + '-' + CAST(DATEPART(DAY, Birth_date) AS Varchar(2))) > purchase_date 
             THEN CONVERT(Date  , CAST( DATEPART(YEAR,purchase_date) AS Varchar(4)) + '-' + CAST(DATEPART(MONTH,Birth_date) AS Varchar(2)) + '-' + CAST(DATEPART(DAY, Birth_date) AS Varchar(2))) -- Condition 2
             ELSE DATEADD(YEAR,1,CONVERT(Date  , CAST( DATEPART(YEAR,purchase_date ) AS Varchar(4)) + '-' + CAST(DATEPART(MONTH,Birth_date) AS Varchar(2)) + '-' + CAST(DATEPART(DAY, Birth_date) AS Varchar(2)))) -- Condition 3
             END
END
FROM dbo.BirthDateTable
SELECT 
CASE    WHEN Birth_date >= purchase_date THEN Birth_date
        WHEN Birth_date < purchase_date
            THEN CASE
                WHEN CONVERT(Date  , CAST( DATEPART(YEAR,purchase_date) AS Varchar(4)) + '-' + RIGHT('00' + CAST(DATEPART(MONTH,Birth_date) AS Varchar(2)),2) + '-' + RIGHT('00' + CAST(DATEPART(DAY, Birth_date) AS Varchar(2)),2)) > purchase_date 
                THEN CONVERT(Date  , CAST( DATEPART(YEAR,purchase_date) AS Varchar(4)) + '-' + RIGHT('00' + CAST(DATEPART(MONTH,Birth_date) AS Varchar(2)),2) + '-' + RIGHT('00' + CAST(DATEPART(DAY, Birth_date) AS Varchar(2)),2))
                ELSE DATEADD(YEAR,1,CONVERT(Date  , CAST( DATEPART(YEAR,purchase_date ) AS Varchar(4)) + '-' + RIGHT('00' + CAST(DATEPART(MONTH,Birth_date) AS Varchar(2)),2) + '-' + RIGHT('00' + CAST(DATEPART(DAY, Birth_date) AS Varchar(2)),2)))
                END
        END AS CalcDate 
FROM dbo.BirthDateTable