我在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}}
顶部的表格会查看所有表格,其中底部正确搜索必要的表格。
答案 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)