Member 12363094 Ответов: 1

Как я могу сделать заказ по времени и дате приведенного ниже запроса


Я хочу заказать дату и время в приведенном ниже запросе

здесь дата и время-это разные столбцы

Что я уже пробовал:

я попробовал ниже один

ALTER Procedure [dbo].[GetRawDataForPowerAndFuel]-- 3076,'06-02-2016 00:00:00','06-02-2016 23:59:59',330
(
   @SiteId INT,
   @StartDate DATETIME,
   @EndDate DATETIME,
   @TimeZone int
)
As
Begin

declare @sitePid varchar(50)
select @sitePid=sitenumber from sites where siteId=@siteId 



(select*,(Cast(Li_BattCurrentCharge1 as float)+(cast(Li_BattCurrentCharge2 as float))+(cast(Li_BattCurrentCharge3 as float))+(cast (Li_BattCurrentCharge4 as float))) as LiCurrentCharge, (Cast(Li_BattCurrentDischarge1 as float)+(cast(Li_BattCurrentDischarge2 as float))+(cast(Li_BattCurrentDischarge3 as float))+(cast(Li_BattCurrentDischarge4 as float)))as LiCurrentDischarge from rawdata where SiteId=@sitePid  
 and convert(varchar,convert(date, [Date], 103),101)  between @StartDate and @EndDate)
              
End

GO

John C Rayan

заказ на какую дату и время ?

Member 12363094

convert (varchar, convert(date, [Date], 103), 101) эта дата и время являются разными столбцами в таблице

Maciej Los

Я не вижу ORDER BY пункт в вашем SELECT заявление...

Member 12363094

я хочу использовать order by в приведенном выше запросе, если я использую этот порядок, я получаю ошибку.
где я должен использовать столбце "порядок сортировки"

Ankur\m/

Что такое "[дата] " в этой строке запроса - и конвертировать(varchar,convert(date, [Date], 103),101) между @StartDate и @EndDate)?
Это текущая дата или столбец из таблицы rawdata? Если это столбец, то каков его тип данных?

Member 12363094

date=convert(varchar, convert(date, [Date], 103), 101)
а время-это отдельная колонка в rawtable

Ankur\m/

Ты меня не понял. convert(varchar, convert(date, [Дата], 103), 101) между @StartDate и @EndDate).
Что такое дата здесь (выделено жирным шрифтом)? Колонка в вашей таблице?

Member 12363094

нет [даты] , которая является типом varchar

Ankur\m/

Извините, я имел в виду [свидание]. Итак, [Date] - это столбец в rawdata, тип данных которого-varchar. Верно?

Member 12363094

да

Ankur\m/

Окей. Теперь ваш оператор select работает? Заказ еще не будет работать, так как у вас нет оператора ORDER BY в конце вашего запроса.

1 Ответов

Рейтинг:
2

David_Wimbley

Таким образом, ваш запрос имел несколько проблем с ним, которые, как я думаю, были исправлены. Но также я думаю, что этот ответ слишком прост для того, что вы задаете. Во всяком случае, я создал две таблицы var для имитации таблиц, с которыми вы использовали запрос, поскольку вы не предоставили никакой схемы для просмотра.

Если это не ответ на ваш вопрос, если вы хотите предоставить свою схему для этого сохраненного процесса вместе с указанием того, какие 2 столбца содержат вашу дату/время, то я уверен, что более точный ответ может быть предоставлен.

--These stored proc params converted to variables
DECLARE @SiteId INT;
DECLARE @StartDate DATETIME;
DECLARE @EndDate DATETIME;
DECLARE @TimeZone INT;

--var tables to replicate your schema
DECLARE @rawdata TABLE (
	SiteId INT NULL,
	Li_BattCurrentCharge1 VARCHAR(10) NULL,
	Li_BattCurrentCharge2 VARCHAR(10) NULL,
	Li_BattCurrentCharge3 VARCHAR(10) NULL,
	Li_BattCurrentCharge4 VARCHAR(10) NULL,
	Li_BattCurrentCharge5 VARCHAR(10) NULL,

	Li_BattCurrentDischarge1 VARCHAR(10) NULL,
	Li_BattCurrentDischarge2 VARCHAR(10) NULL,
	Li_BattCurrentDischarge3 VARCHAR(10) NULL,
	Li_BattCurrentDischarge4 VARCHAR(10) NULL,
	Li_BattCurrentDischarge5 VARCHAR(10) NULL,
	[Date] VARCHAR(200) NULL
);

DECLARE @sites TABLE (
    siteId INT NULL,
	sitenumber VARCHAR(50) NULL
);

--Left the begin to "simulate" the SP
BEGIN

 
DECLARE @sitePid varchar(50);
select @sitePid=(SELECT sitenumber from @sites where siteId=@siteId)
 

 
SELECT *,
(Cast(Li_BattCurrentCharge1 as float)+
 CAST(Li_BattCurrentCharge2 as float)+
 CAST(Li_BattCurrentCharge3 as float)+
 CAST(Li_BattCurrentCharge4 as float)) AS LiCurrentCharge, 
 
 (CAST(Li_BattCurrentDischarge1 as float)+
 CAST(Li_BattCurrentDischarge2 as float)+
 CAST(Li_BattCurrentDischarge3 as float)+
 CAST(Li_BattCurrentDischarge4 as float))as LiCurrentDischarge 
 
 FROM @rawdata 
 WHERE SiteId=@sitePid  AND 
  CONVERT(varchar,convert(date, [Date], 103),101) BETWEEN @StartDate and @EndDate
	ORDER BY [Date]         

End
 
GO


Member 12363094

спасибо но когда я применил order by в конце запроса как urs я получал ошибку

David_Wimbley

Запрос, который я отправил, не дает никаких ошибок. Он будет выполняться, я запустил его на своей локальной машине. У вас было несколько проблем с вашим запросом, и вы использовали скобки в изобилии. Я убрал ненужные скобки, которые, возможно, были частью вашей проблемы.

Member 12363094

когда я использую CONVERT (varchar, convert(date, [Date], 103), 101), то он принимает данные следующей даты, если на эту дату данных нет