Sql сервер передает значение даты в качестве параметра с convert - PullRequest
2 голосов
/ 07 ноября 2011

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

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

My 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 Ответ

1 голос
/ 07 ноября 2011

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

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