2011-12-20 21 views
1

Я хотел бы сравнить datetime datatype, например, «20/12/2011 00:00:00», с форматом даты составной строки (я имею в виду, что он состоит из строки даты, строки месяца и строки года).Как сравнить datetime типа datetime со строкой?

Например, coloumn entime - это тип данных datatime, который хранится «20/12/2011 00:00:00» и другие три столбца (дата, месяц, год соответственно) являются строками. поэтому я хочу сравнить между столбцом entime с датой, месяцем и годом, составленным вместе. Как я могу написать команду SQL для suppurt вышеупомянутого требования?

Надеюсь, вы можете мне помочь?

+0

Подсказка: введите один тип данных в другой. – xQbert

ответ

0

Лучший вариант - преобразовать дату и время в строку, а затем выполнить необходимые сравнения.

Вы можете увидеть here как сделать преобразование.

0

Существует также функция DATEPART в качестве альтернативы.

SELECT * 
FROM DateTable 
WHERE 
DATEPART(YEAR, [DATECOLUMN]) = @YearString 
AND DATEPART(MONTH, [DATECOLUMN]) = @MonthString 
AND DATEPART(DAY, [DATECOLUMN]) = @DayString 
0

Вы можете пойти ниже способом, могли бы вы попробовать его, благодаря

SET DATEFORMAT DMY 
SELECT CAST(CONVERT(VARCHAR(15), GETDATE(), 105) AS DATETIME) 
SELECT CAST(('20'+'-'+'12'+'-'+'2011') AS DATETIME) 

В качестве примера:

SET DATEFORMAT DMY 
SELECT CAST(CONVERT(VARCHAR(15), yourDateColumn, 105) AS DATETIME) FROM TableName 

SELECT CAST((dayColumn+'-'+monthColumn+'-'+yearColumn) AS DATETIME) 
    FROM anotherTable 

Наконец сравнение:

SELECT t1.* FROM tableName t1, anotherTable t2 
WHERE CAST(CONVERT(VARCHAR(15), t1.DateColumnName, 105) AS DATETIME) 
    = CAST((t2.dayColumn+'-'+t2.monthColumn+'-'+t2.yearColumn) AS DATETIME) 
0

Это ваше требование?

DECLARE @tblTemp TABLE 
(
    DAY VARCHAR(10) 
    ,Month VARCHAR(10) 
    ,Year VARCHAR(10) 
) 
DECLARE @dtDateTime VARCHAR(10) = '20/12/2011 00:00:00' 

INSERT INTO @tblTemp VALUES 
('01','01','2011'), 
('01','02','2011'), 
('01','03','2011'), 
('01','04','2012'); 

select * from @tblTemp where CONVERT(DATE,Year +Month+DAY ,103) < CONVERT(DATE,@dtDateTime,103) 
Смежные вопросы