Ich habe Probleme beim Schreiben von SQL Server-Abfragen/Prozeduren mit DateTime
Format in den Tabellen.Vergleichen Sie datetime Wert in gespeicherte Prozedur
Meine Anwendung läuft auf einem Standard-ASP.NET MVC4-Stack mit SQL Server.
Mein Tisch Bookings
hat diese Struktur:
CREATE TABLE [dbo].[Bookings]
(
[BookingId] INT IDENTITY (1, 1) NOT NULL,
[ShowId] INT NOT NULL,
[RowId] INT NULL,
[Username] VARCHAR(100) NULL,
[PaymentId] INT NULL,
[ShowDate] DATETIME NULL,
.....
....
);
Ich habe zwei gespeicherte Prozeduren geschrieben, in dem ich versuche Tabellenspalte ShowDate
mit unterschiedlichen Datumsparameter in Stored Procedure deklariert zu vergleichen.
Verfahren # 1:
CREATE PROCEDURE [dbo].[GetBookingsByDate]
@venueid int,
@fromdate datetime,
@todate datetime
AS
BEGIN
SELECT
City, Title, ScreenTitle, ShowDate,
SUM([Qty]) AS Quantity,
SUM([Charges]) AS TotalAmount,
SUM([OtherCharges]) AS OtherCharges
FROM
ShowBookings
WHERE
Venueid = @venueid
AND ShowDate BETWEEN @fromdate AND @todate
GROUP BY
ScreenId, ShowDate, Venueid, Title, ScreenTitle, City
END
Verfahren # 2:
CREATE PROCEDURE [dbo].[GetAudienceReportsHistory]
@state varchar,
@city varchar,
@theaterName varchar,
@showdate datetime
AS
BEGIN
SELECT
b.BookingId, b.MobileNo, b.SeatNumbers, b.EmailId,
sc.ScreenTitle, sh.ShowTime, a.Title,
b.Username, b.SMSStatus
FROM
Bookings b
JOIN
Shows sh ON b.ShowId = sh.Id
JOIN
Venues AS v ON sh.Venue_Id = v.Id
JOIN
Artifacts a ON sh.Artifact_Id = a.Id
JOIN
Screens AS sc ON sh.Screen_ScreenId = sc.ScreenId
WHERE
b.ShowDate = @showdate
AND b.IsBooked = 'true'
AND b.TimeSolt = '0'
AND v.Title = @theaterName
AND v.City = @city
END
Wie Sie Verfahren # 1 nimmt zwei Datetime-Parameter sehen können, fromdate
und todate
. Die zweite Prozedur benötigt nur einen Datetime-Parameter showdate
.
Prozedur 1 gibt die korrekte Ergebnismenge zurück, jedoch führt Prozedur 2 keine Ergebnisse zurück. Aber ich habe in den Tabellen überprüft, dass ich richtige Daten habe, die für die Proc2-Abfrage zurückgegeben werden sollen. Es scheint einige DateTime-Formatkonflikte zu geben.
Ich sende Datetime Parameter zu den Abfragen in "JJJJ-MM-TT" Format (zB: 2017-05-30). In der Tabelle ist die Spalte ShowDate
im Format "TT-MM-JJJJ" (zB: 30.05.2017) gespeichert.
Ich habe versucht, den Parameter in verschiedenen Datumsformaten zu senden, aber ich bekomme keine Ergebnisse für Proc2. Bitte hilf mir, das zu lösen. Danke im Voraus. Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.
Sie Zeitkomponente fehlen - Sie müssen b.ShowDate to Date werfen, wenn @showdate ist so etwas wie ‚2017.06.01 00: 00: 00: 00000 ' – PacoDePaco
Bitte veröffentlichen Sie einige Ihrer aktuellen Datum/Uhrzeit Einträge. Meine Vermutung wäre, dass Sie Daten mit einem Zeitelement haben. Wenn Sie also nach einem Bereich suchen, werden sie gefunden, aber ein genaues Datum würde nur mit Daten übereinstimmen, bei denen der Zeitabschnitt 00:00 – JeffUK
In Proc1 ist die Abfrage auf a Einzeltisch. In 'Proc2' befindet sich die Abfrage in mehreren Tabellen mit Joins. Es kann sein, dass ein oder mehrere Joins fehlschlagen (d. H. Es gibt keine übereinstimmenden Daten). Haben Sie das konkret untersucht? –