SQL: ISNULL-function mit verschiedenen Arten von Parametern

In SQL server hat die ISNULL () – function dieselbe Art von Parametern.

check_expression

Ist der Ausdruck auf NULL geprüft. check_expression kann von jedem Typ sein.

Ersatzwert

Ist der Ausdruck zurückgegeben, wenn check_expression NULL ist. replacement_value muss den gleichen Typ wie check_expresssion haben .

Wie kann ich es mit einer anderen Art von Parameter verwenden? Ich möchte mit date und string Parameter wie diese verwenden ISNULL(A.DATE, '-')

HINWEIS : Typ von A.DATE ist datetime .

EDIT-1 : Meine volle Abfrage, die 0 Zeile erhält:

  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 : Aber das funktioniert

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

Könnte der Grund sein?

Du kannst nicht Die ISNULL-function wird von sich selbst als Abfrageergebnisspalte oder in einem Ausdruck verwendet, der schließlich eine Spalte im Abfrageergebnis ist. Alle Felder / Zeilen in einer Spalte müssen denselben datatyp haben. Also musst du wählen

Eine Lösung wäre, das DATE auf String zu casting, also ist das Ergebnis immer ein String, aber ich fühle die beste Lösung wäre, NULL für leere Termine zurückzugeben und die Präsentationsschicht zu entscheiden, ob die NULL-data als - und in welchem ​​Format die Nicht-Null-Termine angezeigt werden sollen (Einstellungen des Kundengebiets).

Mit Präsentationsschicht, ich meine alles, was zeigt oder gibt diese data, die eine Web-Seite, ein CSV-Exporteur, ein Reporting-Tool, was auch immer sein kann.

Kannst du einfach dein Date als Varchar casting? Da du ausgegeben bist, kann sowieso kein gültiges date sein, das sollte gut funktionieren:

 ISNULL(CONVERT(varchar(10), A.Date, 101),'-') 

Du musst das date auf einen String casting, wenn du wirklich einen - anstelle von null willst.

 declare @T table(adate datetime) insert into @T values(null) insert into @T values(getdate()) select isnull(convert(varchar(23), adate, 126), '-') from @T 

Du kannst es versuchen:

  CASE WHEN A.DATE IS NULL THEN '-' ELSE CONVERT(VARCHAR(25), A.DATE, 112) END 

Ich würde DATE-Werte von [DATE]TIME zu VARCHAR mit CONVERT / CAST umwandeln :

 SELECT ... ISNULL( CONVERT(VARCHAR(25), A.DATE, 112) , '-' ) AS DATE FROM ... 

Statt 112 Stil (yyymmdd) kann ein anderer Stil verwendet werden: 103 (TT / MM / JJJJ), 101 (mm / TT / JJJJ) oder ein anderer Stil von Date and Time Styles Abschnitt .