1

在 SQL Server 中,ISNULL()函数必须具有相同类型的参数。

check_expression

是要检查 NULL 的表达式。check_expression 可以是任何类型。

替换值

如果 check_expression 为 NULL,则返回表达式。replacement_value必须与 check_expresssion 具有相同的类型

如何将它与不同类型的参数一起使用?我想使用 withdatestring这样的参数ISNULL(A.DATE, '-')

注意:类型A.DATEdatetime

EDIT-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

EDIT-2:但这工作

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

可能是原因JOIN吗?

4

4 回答 4

4

你不能。ISNULL 函数本身用作查询结果列,或在最终成为查询结果中的列的表达式中使用。列中的所有字段/行必须具有相同的数据类型。所以你必须做出选择。

一种解决方案是将 DATE 转换为字符串,因此结果始终是字符串,但我认为最好的解决方案是为空日期返回 NULL 并让表示层决定是否应将 NULL 日期显示为-和应以何种格式显示非空日期(客户端区域设置)。

对于表示层,我指的是显示或输出这些数据的任何东西,可以是网页、CSV 导出器、报告工具等等。

于 2011-11-01T07:43:43.210 回答
4

您可以简单地将您的日期转换为 varchar 吗?由于您的输出可能不是一个有效的日期,这应该可以正常工作:

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

如果您真的想要 a-而不是 ,则需要将日期转换为字符串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 回答