2

重複の可能性:
SQLで最低2つの値を取得する

2つの日時フィールドを持つテーブルがあり、最も古い日付が日付変数と等しい行を選択したいと思います。LEAST関数がどこかで使用されているのを見ましたが、T-SQLでは使用できません

私はこのようなものが必要です

SELECT LEAST(date1, date2) as theDate FROM theTable WHERE theDate = '2012-09-24'

しかし、それはT-SQLで機能します。また、date1またはdate2がnullになる場合があるため、知っておくことが重要な場合があります。

4

4 に答える 4

6

他の人が提供したCASEソリューションは、2つの値の場合(しゃれは意図されていません)にうまく機能します。将来の参考のために、3つ以上の値では少し扱いに​​くいので、次のようなことをしたいと思うかもしれません。

SELECT (SELECT MIN(mydate) 
        FROM (VALUES(date1),(date2),(date3)) mylist(mydate)
       ) AS theDate
FROM theTable 
WHERE theDate = '2012-09-24' 
于 2012-09-24T17:23:40.600 に答える
4

T-SQLにはそのような関数はありません。試す:

SELECT theDate = CASE WHEN date1 < date2 THEN date1 ELSE date2 END FROM ... ;

NULLを処理するには、次のようにします。

SELECT theDate = NULLIF(CASE WHEN date1 < date2 THEN date1 ELSE date2 END, '20301231')
FROM 
(
  SELECT 
    date1 = COALESCE(date1, '20301231'), 
    date2 = COALESCE(date2, '20301231')
  FROM ...
) AS x;

また、句でエイリアスtheDateを参照することはできません。エイリアスはまだ存在していません。WHEREあなたは言いたいかもしれません:

WHERE '20120924' IN (date1, date2);
于 2012-09-24T17:05:10.993 に答える
1

caseを模倣するためleastに、およびサブクエリを使用して、句でcase結果を参照できるようにすることができます。where

select  *
from    (
        select  case 
                when date1 > date2 or date1 is null then date2
                else date1
                end as theDate
        ,       *
        from    TheTable
        )
where   theDate = '2012-09-24'
于 2012-09-24T17:05:30.227 に答える
1

他の答えは確かに有効ですが、ここではUDFの形式であり、これはあなたが求めていたものに近いものです。

CREATE FUNCTION [dbo].[LeastDate] (@d1 datetime, @d2 datetime)
RETURNS datetime
AS
BEGIN
    DECLARE @least datetime

    IF @d1 is null or @d2 is null
        SET @least = null
    ELSE IF @d1 < @d2
        SET @least = @d1
    ELSE
        SET @least = @d2

    RETURN @least
END

使用法:

SELECT dbo.LeastDate(date1, date2) as theDate
FROM theTable
WHERE dbo.LeastDate(date1, date2) = '2012-09-24'

または、ネストされた選択を使用して、1回だけ実行できます。

SELECT * FROM (
  SELECT dbo.LeastDate(date1, date2) as theDate FROM theTable
) t
WHERE theDate = '2012-09-24'

where句で関数を個別に呼び出すか、ネストされたselectを使用するかの選択は、これだけでなく、他のSQL関数の場合と同じであることに注意してください。

于 2012-09-24T17:25:04.050 に答える