Выбор новой даты между двумя столбцами

Переменные разрешены во время компиляции, времени выполнения методов. ARef имеет тип A, поэтому aRef.Intvalue является временем компиляции, равным 1.

23
задан TheTXI 10 January 2009 в 18:32
поделиться

7 ответов

СЛУЧАЙ является, по моему скромному мнению, Вашим наилучшим вариантом:

SELECT ID,
       CASE WHEN Date1 > Date2 THEN Date1
            ELSE Date2
       END AS MostRecentDate
FROM Table
<час>

, Если один из столбцов nullable просто, должен включить в COALESCE :

.. COALESCE(Date1, '1/1/1973') > COALESCE(Date2, '1/1/1973')
42
ответ дан Andre Figueiredo 28 November 2019 в 22:47
поделиться
select ID, 
case
when Date1 > Date2 then Date1
else Date2
end as MostRecentDate
from MyTable
5
ответ дан RedFilter 28 November 2019 в 22:47
поделиться

Можно бросить это в скалярную функцию, которая делает обработку, аннулирует немного легче. Очевидно, это не будет немного быстрее, чем встроенный оператор выбора.

ALTER FUNCTION [fnGetMaxDateTime] (
    @dtDate1        DATETIME,
    @dtDate2        DATETIME
) RETURNS DATETIME AS
BEGIN
    DECLARE @dtReturn DATETIME;

    -- If either are NULL, then return NULL as cannot be determined.
    IF (@dtDate1 IS NULL) OR (@dtDate2 IS NULL)
        SET @dtReturn = NULL;

    IF (@dtDate1 > @dtDate2)
        SET @dtReturn = @dtDate1;
    ELSE
        SET @dtReturn = @dtDate2;

    RETURN @dtReturn;
END
5
ответ дан Michael Haren 28 November 2019 в 22:47
поделиться

В SQL Server 2012 можно использовать сокращенное выражение IIF - CASE, хотя последнее является стандартом SQL:

SELECT ID,
       IIF(DateColA > DateColB, DateColA, DateColB) AS MostRecentDate
  FROM theTable
3
ответ дан Andre Figueiredo 28 November 2019 в 22:47
поделиться

Каждый раз, когда возможно, используйте Подставляемые функции, как они переносят, ни одна из производительности обычно не выходит связываемый с UDFs...

Create FUNCTION MaximumDate 
(   
@DateTime1 DateTime,
@DateTime2 DateTime
)
RETURNS TABLE 
AS
RETURN 
(
    Select Case When @DateTime1 > @DateTime2 Then @DateTime1
                Else @DateTime2 End MaxDate
)
GO 

Для инструкций по использованию, см. Здесь

2
ответ дан Charles Bretana 28 November 2019 в 22:47
поделиться

Кроме оператора выбора, я не верю так...

  Select Case When DateColA > DateColB Then DateColA 
              Else DateColB End MostRecent
  From Table ... 
1
ответ дан Charles Bretana 28 November 2019 в 22:47
поделиться

AFAIK, нет встроенной функции для получения максимум двух значений, но вы можете легко написать свое собственное как:

CREATE FUNCTION dbo.GetMaximumDate(@date1 DATETIME, @date2 DATETIME)
RETURNS DATETIME
AS
BEGIN
    IF (@date1 > @date2)
        RETURN @date1
    RETURN @date2
END

и назвать его как

SELECT Id, dbo.GetMaximumDate(Date1, Date2)
FROM tableName
0
ответ дан Recep 28 November 2019 в 22:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: