Ich habe den folgenden Code:SQL Server Datetime-Variablen Rückkehr Nullwert
DECLARE @DispDateTime datetime
SELECT @DispDateTime = table1.U_dispDate + convert(datetime, right('0'+convert(varchar, table1.U_dispTime/100),2)+':'+right('0'+convert(varchar,table1.U_dispTime % 100),2),120)
from table1
select table1.callID,
@DispDateTime,
table1.U_dispDate + convert(datetime, right('0'+convert(varchar, table1.U_dispTime/100),2)+':'+right('0'+convert(varchar,table1.U_dispTime % 100),2),120)
from table1
Sie können sehen, dass die Werte in meiner select-Anweisung sind genau das gleiche wie das, was in meiner Variablendeklaration ist. Doch am Ende meine Ergebnisse wie folgt aussehen:
callID DispDate Variable DispDate Calc
13 NULL 2016-04-04 07:07:00.000
15 NULL 2016-04-04 09:11:00.000
16 NULL 2016-04-04 07:10:00.000
19 NULL 2016-04-04 08:27:00.000
21 NULL 2016-04-04 07:39:00.000
23 NULL 2016-04-04 07:06:00.000
24 NULL 2016-04-04 10:20:00.000
25 NULL 2016-04-04 09:23:00.000
Ich kann nicht für das Leben von mir herauszufinden, warum dies geschieht. Ich bin zu 98% sicher, dass es etwas Einfaches ist und ich bin eigentlich ein Idiot, aber es ist das zweite Mal, dass ich in ein paar Tagen auf dieses Problem gestoßen bin. (Es ist auch das erste Mal, dass ich Datetime-Variablen verwenden musste, was Speicher angeht, so dass es genauso wahrscheinlich etwas ist, was ich nicht weiß).
EDIT:
A) Der Grund, dass die Zeiten, als nvarchar gespeichert ist, weil das ist, was durch das System (SAP Business One diktiert wird, wenn es ankommt). Das kann ich nicht ändern.
B) Ich denke, was ich wirklich tun möchte, ist ein CTE, und das wird mein Problem beheben. Ich glaube, ich habe gerade vergessen, wie Variablen funktionieren oder etwas (I. E. nicht durch Zeile festgelegt, aber einmal eingestellt und dann ausgeführt).
Danke für die Hilfe alle!
Die absolut beste Option wäre es, das Speichern von Datumsangaben als Varchare zu unterbinden. Eine andere Sache zu beachten ist, dass Sie nicht die Länge Ihrer Varchars angegeben haben. Dies bedeutet, dass die Standardeinstellung verwendet wird, die sich je nach Kontext ändern kann. Am besten geben Sie immer die Länge an. Wie dort gepostet scheint es kein Problem zu geben. Können Sie Beispieldaten posten, die dieses Problem reproduzieren können, damit wir Ihnen bei der Behebung helfen können? –
Was sollte 'SELECT @DispDateTime = ...' bedeuten? Sie brauchen (können) nur einen Wert in '@ DispDateTime' auswählen und versuchen, die ganze Spalte zu schreiben :) Verwenden Sie' TOP 1' oder bestimmen Sie einen signifikanten Wert für diese Variable. – gofr1
Überprüfen Sie SELECT table1.U_dispDate, konvertieren (datetime, rechts ('0' + konvertieren (varchar, table1.U_dispTime/100), 2) + ':' + rechts ('0' + konvertieren (varchar, table1.U_dispTime% 100), 2), 120) aus table1 table1.callID auswählen. ....... Ist es NULL für irgendeine Spalte –