在SQL Server中将datetime转换为string / varchar

时间:2014-04-23 16:17:14

标签: sql sql-server date

我在SQL Server中有一个视图,它使用日期来确定从哪些表访问数据。问题是,只有在varchar '20120423'之类的GETDATE()时才会有效。

因此,我尝试使用SELECT动态创建此日期,而不必使用已键入的版本。当我运行顶部'20120423'语句时,它会像我期望的那样返回IF但是当我尝试比较这两个值时它们不相等而'VALUES ARE NOT THE SAME'语句打印SELECT '''' +CONVERT(VARCHAR(8), DateAdd(YY,-2,GETDATE()), 112) +'''' IF '''' +CONVERT(VARCHAR(8), DateAdd(YY,-2,GETDATE()), 112) +'''' = '20120423' BEGIN PRINT 'VALUES ARE THE SAME' END ELSE BEGIN PRINT 'VALUES ARE NOT THE SAME' END

SELECT * 
FROM DatesView 
WHERE Timestamp > CONVERT(VARCHAR(8), DateAdd(YY,-2,GETDATE()), 112)

SELECT * 
FROM DatesView 
WHERE Timestamp > '20120423'

我有点迷失在哪里离开这里。谢谢你的帮助。

修改
根据给出的答案,这两个查询应该是相同的,即使我的观点对它们的处理方式不同。

{{1}}

顶部的表格会查看所有表格,其中底部正确搜索必要的表格。

3 个答案:

答案 0 :(得分:3)

你被引号甩掉了,只要将它们删除它们就没必要了。

SELECT CONVERT(VARCHAR(8), DateAdd(YY,-2,GETDATE()), 112) 

IF CONVERT(VARCHAR(8), DateAdd(YY,-2,GETDATE()), 112)  = '20120423' 
BEGIN
    PRINT 'VALUES ARE THE SAME'
END
ELSE
BEGIN
   PRINT 'VALUES ARE NOT THE SAME'
END

答案 1 :(得分:1)

删除前两个'。试试这个。 您正在比较'20120423'=20120423

SELECT '' +CONVERT(VARCHAR(8), DateAdd(YY,-2,GETDATE()), 112) +'' 

IF '' +CONVERT(VARCHAR(8), DateAdd(YY,-2,GETDATE()), 112) +''  = '20120423' 
BEGIN
    PRINT 'VALUES ARE THE SAME'
END
ELSE
BEGIN
   PRINT 'VALUES ARE NOT THE SAME'
END

答案 2 :(得分:1)

您正在向字符串添加撇号,因此您的比较字面上(用括号替换字符串分隔符):

if ['20120423']  = [20120423]   

我想你想要:

IF CONVERT(VARCHAR(8), DateAdd(YY,-2,GETDATE()), 112) = '20120423'

和/或

SELECT CONVERT(VARCHAR(8), DateAdd(YY,-2,GETDATE()), 112)