2011-12-20 29 views
1

我想比较日期时间数据类型,如“20/12/2011 00:00:00”,复合字符串日期格式(我的意思是它由日期字符串,月份字符串和年份字符串组成)。我如何将datetime数据类型与字符串进行比较?

例如,coloumn entime是存储“20/12/2011 00:00:00”数据和其他三列(日期,月份,年份)的字符串的datatime数据类型。所以我想比较entime列与日期,月份和年份的组合,我如何编写SQL命令来支持上述要求?

希望你能帮助我吗?

+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) 
相关问题