我如何比较datetime数据类型和字符串?

时间:2011-12-20 11:35:54

标签: sql-server sql-server-2005

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

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

希望你能帮帮我吗?

4 个答案:

答案 0 :(得分:0)

最好的选择是将datetime转换为字符串,然后进行所需的比较。

您可以看到here如何进行转化。

答案 1 :(得分:0)

还有DATEPART功能作为替代方案。

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

答案 2 :(得分: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)

答案 3 :(得分: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)