ich diese SQL-Im Fall erhalten wird Fehler Fehler bei der Konvertierung, wenn Datum und/oder Uhrzeit aus Zeichenfolge in SQL Server 2012
DECLARE @CurrentLocation geography;
SET @CurrentLocation = geography::Point(@Latitude,@Longitude,4326)
SELECT
ID,
RestaurantTitle,
CuisineName,
Latitude, Longitude,
MinimumOrder,
ImagePath,
CASE
WHEN r.OpeningTimeType IN ('24*7')
THEN r.OpeningTimeType
ELSE r.Breakfast_OpenTime
END AS OpenTime,
CASE
WHEN r.Breakfast_OpenTime > CONVERT (time, CURRENT_TIMESTAMP)
AND R.Dinner_CloseTime < CONVERT (time, CURRENT_TIMESTAMP)
THEN 'PRE ORDER'
ELSE 'ORDER NOW'
END AS BUTTONNAME,
ROUND(ROUND(GeoLocation.STDistance(@CurrentLocation), 0)/1609.34, 0) AS Distance
FROM
[dbo].[tbl_Restaurant1] r
CROSS APPLY
(SELECT
CuisineName + ','
FROM
tbl_Cuisine
WHERE
tbl_Cuisine.ID IN (SELECT CuisineID_FK
FROM tbl_Restaurant_Cuisine
WHERE r.ID = RID_FK)
FOR XML PATH('')) D (CuisineName)
WHERE
@CurrentLocation.STDistance([GeoLocation]) <= 40000
Wenn ich diese SQL haben Umwandlung lief, wird eine Ausnahme ausgelöst:
Fehler bei der Konvertierung, wenn Datum und/oder Uhrzeit aus Zeichenfolge Umwandlung
Hier sind die Spalten:
ID int
RestaurantTitle varchar(50)
Latitude decimal(10, 6)
Longitude decimal(10, 6)
MinimumOrder int
ImagePath varchar(50)
OpeningTimeType varchar(50)
breakfast_OpenTime time
Ihre erste Fall Aussage versucht, zu sein scheint eine Zeichenfolge ('r zu verschmelzen. OpeningTimeType') mit einem Datum und/oder einer Uhrzeit ('r.Breakfast_OpenTime'), was wahrscheinlich den Fehler verursacht. Bei einer case-Anweisung müssen die zurückgegebenen Werte alle in denselben Datentyp konvertiert werden können (der Datentyp mit der höchsten Priorität) (https://msdn.microsoft.com/en-us/library/ms190309 .aspx)). z.B. '24 * 7 'kann nicht in ein Datum und/oder eine Uhrzeit umgewandelt werden. – ZLK
(Eine mögliche Lösung besteht darin, Ihre 'r.Breakfast_OpenTime' als VARCHAR in der ersten case-Anweisung zu interpretieren). – ZLK
Behebung dieses Problems durch Ändern der ersten Fallanweisung durch CASE WHEN r.OpeningTimeType = '24 * 7 'DANN r.OpeningTimeType ELSE CONVERT (varchar (15), CAST (Frühstück_OpenTime AS TIME), 100) END AS OpenTime .thanks –