1

SQL Serverでは、ISNULL()関数は同じタイプのパラメーターを使用する必要があります。

check_expression

NULLをチェックする式です。check_expressionは、どのタイプでもかまいません。

replace_value

check_expressionがNULLの場合に返される式です。replace_valueは、check_expresssionと同じタイプである必要があります

異なるタイプのパラメーターでどのように使用できますか?このようなパラメータで使用dateしたいstringISNULL(A.DATE, '-')

:のタイプはA.DATEですdatetime

編集-1:0行を取得している私の完全なクエリ:

    SELECT A.pkey as KREDİ, A.SUMMARY , D.BayiStatu AS STATU, D.Sorumlu AS SORUMLU, C.BayiSonuc as SONUC, ISNULL( CONVERT(VARCHAR(25), A.CREATED, 112) , '-' ), ISNULL( CONVERT(VARCHAR(25), A.RESOLUTIONDATE, 112) , '-' ), dbo.CUSTVAL(11931, A.ID, 'S') AS BAYİ, ISNULL( CONVERT(VARCHAR(25), dbo.GetLastStatuTime(A.ID), 112) , '-' ) AS SON_STATU_TAR,j2.SUMMARY, ISNULL( CONVERT(VARCHAR(25), j2.CREATED, 112) , '-' ), ISNULL( CONVERT(VARCHAR(25), j2.RESOLUTIONDATE, 112) , '-' ), j3.SUMMARY, ISNULL( CONVERT(VARCHAR(25), j3.CREATED, 112) , '-' ), ISNULL( CONVERT(VARCHAR(25), j3.RESOLUTIONDATE, 112) , '-' )
FROM AspNetServicesDB.dbo.SONUC_MAP C, JİRA.resolution E, jira.issuestatus B, AspNetServicesDB.dbo.STATU_MAP D, Jira.jiraissue A
INNER JOIN Jira.issuelink i
    ON i.SOURCE = A.ID and i.SEQUENCE = 0
INNER JOIN Jira.jiraissue As j2
    ON i.DESTINATION =j2.ID 
LEFT JOIN Jira.issuelink i2 
    ON i2.SOURCE = A.ID  and i2.SEQUENCE = 1
LEFT JOIN Jira.jiraissue As j3 
    ON i2.DESTINATION = j3.ID
WHERE A.issuestatus = B.ID
AND 'BAŞARAN OTOMATİV' = dbo.CUSTVAL(11931, A.ID, 'S')
AND B.pname = D.JiraStatu collate Turkish_CS_AI
AND A.issuetype != 11
AND A.RESOLUTION = E.ID
AND E.pname = C.JiraSonuc collate Turkish_CS_AI

編集-2:しかし、これは機能しています

select ISNULL( CONVERT(VARCHAR(25), A.RESOLUTIONDATE, 112) , '-' )
FROM Jira.jiraissue A

理由かもしれませJOINんか?

4

4 に答える 4

4

できません。ISNULL関数は、それ自体がクエリ結果の列として、または最終的にクエリ結果の列になる式で使用されます。列のすべてのフィールド/行は同じデータ型である必要があります。したがって、選択する必要があります。

1つの解決策は、DATEを文字列にキャストすることです。したがって、結果は常に文字列になりますが、空の日付に対してNULLを返し、プレゼンテーション層にNULLの日付を次のように表示するかどうかを決定させるのが最善の-解決策だと思います。 null以外の日付をどの形式で表示するか(クライアントロケール設定)。

プレゼンテーション層とは、このデータを表示または出力するものすべてを意味します。これには、Webページ、CSVエクスポーター、レポートツールなどがあります。

于 2011-11-01T07:43:43.210 に答える
4

日付をvarcharとして単純にキャストできますか?出力はとにかく有効な日付ではない可能性があるため、これは問題なく機能するはずです。

ISNULL(CONVERT(varchar(10), A.Date, 101),'-')
于 2011-11-01T07:44:18.453 に答える
3

-の代わりに本当に必要な場合は、日付を文字列にキャストする必要がありますnull

declare @T table(adate datetime)
insert into @T values(null)
insert into @T values(getdate())

select isnull(convert(varchar(23), adate, 126), '-')
from @T
于 2011-11-01T07:44:48.497 に答える
1

あなたが試すことができます:

 CASE WHEN A.DATE IS NULL
      THEN '-'
      ELSE CONVERT(VARCHAR(25), A.DATE, 112)
 END
于 2011-11-01T07:44:45.920 に答える