如何生成日期

时间:2011-02-03 06:25:09

标签: sql sql-server sql-server-2005

使用SQL Server 2005

Tabl1

ID Date Intime Outtime

001 20101201 080000 180000
001 20101202 210000 060000
001 20101203 180000 090000
001 20101204 100000 170000
....

Date Datatype is nvarchar
Intime, Outtime datatype is nvarchar
Intime, Outtime Format: HHMMSS

从table1中,我想再创建一个列名为NextDate。 下一个日期列应显示具有以下条件的日期列的下一个日期

If Outtime is Greater than Intime then it should display the next date
If outtime is less than intime then it should display the same date

预期产出

ID日期Intime Outtime NextDate

001 20101201 080000 180000 20101201 (Outtime is less than Intime)
001 20101202 210000 060000 20101203 (Outtime is greater than Intime)
001 20101203 180000 090000 20101204 (Outtime is greater than Intime)
001 20101204 100000 170000 20101204 (Outtime is less than Intime)
....

如何查询上述情况。

需要查询帮助。

2 个答案:

答案 0 :(得分:2)

我同意 @marc_s ,当您使用日期和时间时,最好的方法是使用datetime数据类型。

但是你可以临时使用这段代码。

SELECT ID, [Date], Intime, Outtime, 
            CASE 
                WHEN Outtime > Intime THEN 
                    [Date] 
                WHEN Outtime < Intime THEN 
                    CONVERT(
                            nvarchar,
                            DATEADD(
                                    dd,
                                    1,
                                    CONVERT(
                                            datetime,
                                            SUBSTRING([Date],1,4)+'-'+SUBSTRING([Date],5,2)+'-'+SUBSTRING([Date],7,2)
                                            )
                                    ),
                            112
                            ) 
                END AS NewDate

答案 1 :(得分:0)

使用选择案例:

DECLARE @Dates  Datetime
DECLARE @Intime Datetime
DECLARE @Outtime Datetime

Set @Intime='1/21/2010'
Set @Outtime='1/20/2010'
Set @Dates=GETDATE()

Select @Dates,@Intime,@Outtime,
         cASE 
     WHEN @Outtime > @Intime then  @Dates + 1
     WHEN @Outtime < @Intime then @Dates
     ELSE GETDATE()
     END as [NextDate]