SQL Server:使用SELECT转换而不是SELECT格式

时间:2014-08-21 17:29:25

标签: sql sql-server date

我收到了这个声明:

Select Format((
    Select Max([Date])
    from BusinessDaysCalendar
    where [date] in (
         Select top 1 [date]
         from BusinessDaysCalendar
         where date > CURRENT_TIMESTAMP
    )
),'MM/dd/yyyy', 'en-US') [retval]

以此格式08/22/2014

返回日期

我想使用Select CONVERT来获取格式为Aug 22, 2014的日期。我知道如何使用这个语句来获得我需要的东西

SELECT CONVERT(VARCHAR(12), GETDATE(), 107)

我只是很难将它与第一个语句集成在一起。

非常感谢任何帮助。感谢。

3 个答案:

答案 0 :(得分:0)

我认为你只需要用第一个语句替换“GETDATE()”。所以:

SELECT CONVERT(VARCHAR(12),
(Select 
    Max([Date]) 
from BusinessDaysCalendar 
where [date] in 
   (Select 
        top 1 [date] 
    from BusinessDaysCalendar 
    where date > CURRENT_TIMESTAMP)
),107)

答案 1 :(得分:0)

感谢您的回复,但正如我正在努力的那样,我遇到了解决方案:

Select convert(varchar(12),(
select (
Select Max([Date]) 
from BusinessDaysCalendar 
where [date] in (
Select top 1 [date] 
from BusinessDaysCalendar 
where date > CURRENT_TIMESTAMP))),107) [retval]

这给了我2014年8月22日我正在寻找的价值。感谢。

答案 2 :(得分:0)

我将您的查询重新格式化为更易读的内容 - 我的意思是更容易确定给定语句的哪一部分,例如转换函数的参数在哪里,以及哪些行是每个子查询的一部分。

我还包括第二个版本,我认为它正在完成你想要的东西,但有点简单,因为它跳过了1个子查询级别。我的理解是你试图在当前日期之后的最低日期返回一行。最内部子查询的问题在于,如果没有Order By,则无法保证返回的行将是最低值。 Top 1只是告诉它返回它遇到的第一行,并且它可能不是符合您标准的最低值。

    Select convert(varchar(12)
                    ,( --this is the 2nd argument for the 'convert' function
                       select (
                                Select Max([Date]) --determine the Max (Date) **It looks like you're trying to get the first value after today, and ensure you're only returning 1 row
                                from BusinessDaysCalendar 
                                where [date] 
                                        in (--select the 1st date ** note: since this subquery is only returning a single row, you can use "=" instead of "in"
                                            Select top 1 [date] 
                                            from BusinessDaysCalendar 
                                            where date > CURRENT_TIMESTAMP)
                                )
                        )
                    ,107 --the 3rd argument for 'convert'
    ) [retval]

    Select convert(varchar(12)
                    ,( --this is the 2nd argument for the 'convert' function
                       select (
                                Select min([Date]) --determine the Max (Date) **It looks like you're trying to get the first value after today, and ensure you're only returning 1 row
                                    from BusinessDaysCalendar 
                                    where date > CURRENT_TIMESTAMP
                                )
                        )
                    ,107 --the 3rd argument for 'convert'
    ) [retval]