1

ACTUALCLOSEDATEという日時フィールドがあり、STATUSNUM = 0という対応するフィールドの場合、このフィールドは9999-12-31 00:00:00に等しくなります。STATUSNUMが1に変更された場合(レコードが閉じられた場合)、ACTUALCLOSEDATEの値は次のようになります。現在の日時に変更されました。

私のクエリでは、ACTUALCLOSEDATE = 9999-12-31 00:00:00の場合の値を、日付だけが必要でない場合は「StillOpen」に置き換えたいと思います。

私はエラーで以下のコードを試しました。アイデア?IIFはSQL2008r2で利用できませんか?もしそうなら、私はそれを使うことができますか?

/* This is what I need but it dosen't work in SQL 2008 R2 */
SELECT
IIF (YEAR(ACTUALCLOSEDATE)=9999, "Still Open", ACTUALCLOSEDATE) AS ActCloseDate,
FROM OPPORTUNITY

/* This dosen't work either */
SELECT
CAST YEAR(ACTUALCLOSEDATE)
    WHEN 9999 THEN 'Still Open'
    ELSE ACTUALCLOSEDATE
    END AS Act_Close,
FROM OPPORTUNITY
4

3 に答える 3

4

列は一貫したデータ型である必要があります。あなたのインスタンスでは、条件付きで日付または varchar を表示しようとしています。

できるよ:

SELECT 
    CASE YEAR(ACTUALCLOSEDATE)     
    WHEN 9999 THEN 'Still Open'     
    ELSE CAST(ACTUALCLOSEDATE AS nvarchar(25))
    END AS Act_Close
FROM OPPORTUNITY 

を使用CONVERTして、式の日付をELSE好みの形式にフォーマットすることができます。

于 2012-08-30T17:43:25.830 に答える
2

構文は次のとおりです。

SELECT
    CASE WHEN YEAR(ACTUALCLOSEDATE) = 9999 
      THEN 'Still Open'
      ELSE CONVERT(VARCHAR, createDate, 120) --Format: yyyy-mm-dd hh:mi:ss(24h)
    END AS Act_Close,
FROM OPPORTUNITY

varchar「まだ開いている」と同じタイプになるように、日付列をに変換する必要があります

于 2012-08-30T17:43:55.573 に答える
1

IIFSQL Server 2012 以降で利用できます。

CASEこのステートメントは 2008 R2 で使用できます。CASEではなくであることに注意してくださいCAST

于 2012-08-30T17:42:21.957 に答える