Sql Server передает значение даты в качестве параметра с помощью convert

#sql #sql-server #datetime #variables

#sql #sql-сервер #дата-время #переменные

Вопрос:

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

Мое имя столбца date_tm и пример данных, подобных этому: 2011-04-04 00:30:19.107

Мой Sql такой:

 DECLARE @Date_From DATETIME;
DECLARE @Date_To DATETIME;

SET @Date_From = CONVERT(VARCHAR(10),DATEADD(d,DATEDIFF(d,0,GETDATE()),0)-1,120);
SET @Date_To = CONVERT(VARCHAR(10),DATEADD(d,DATEDIFF(d,0,GETDATE()),0)-1,120);

select distinct no, lot
from database.dbo.TblName
Where Convert(varchar(10), Date_Tm, 120) Between '@Date_From' And '@Date_To';
  

Я пытаюсь отладить его, используя это

 Print(@Date_From);
Print(@Date_To); 
  

Вывод выглядит примерно так «6 ноября 2011 12:00 утра», я уже не конвертирую его?
а затем я протестировал оператор select следующим образом:

 select CONVERT(VARCHAR(10),DATEADD(d,DATEDIFF(d,0,GETDATE()),0)-1,120);
  

Вывод выглядит примерно так «2011-11-06» почему это работает здесь?

Результат выбора — ничего ==»

Затем я много тестирую этот формат даты, я пытаюсь выполнить прямой анализ в date_from и Date_to

 where Convert(varchar(10), Date_Tm, 120) Between '2011-04-04' And '2011-04-04' 
  

Я получаю то, что ожидается

В любом случае, я хотел получить данные по диапазону дат.Я сокрушаю свою голову этим методом преобразования ==»

Пожалуйста, помогите мне.

Спасибо:

PS: Пожалуйста, не стесняйтесь озвучивать мою ошибку. мы все учимся на ошибках и приносим извинения за мой плохой английский.

С уважением:

LiangCk

Ответ №1:

Это потому, что вы объявляете свои две переменные как datetime вместо varchar(10). SQL автоматически преобразует его обратно в datetime, потому что ваши переменные имеют значение datetime.

 DECLARE @Date_From VARCHAR(10);
DECLARE @Date_To VARCHAR(10);
  

Комментарии:

1. amp;%*@(%@)%@@ какой глупый вопрос я задаю… спасибо Norlando, я исправляю это, просто изменив datetime на varchar(10) следующим образом:ОБЪЯВИТЬ @Date_From из VARCHAR(10);

2. @LiangCk, никаких проблем, просто простая ошибка, которую я совершаю постоянно.