Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL Server中将datetime转换为字符串/varchar_Sql_Sql Server_Date - Fatal编程技术网

在SQL Server中将datetime转换为字符串/varchar

在SQL Server中将datetime转换为字符串/varchar,sql,sql-server,date,Sql,Sql Server,Date,我在SQLServer中有一个视图,它使用日期来确定从哪些表访问数据。问题是,它似乎只有在将日期指定为varchar时才起作用,就像'20120423'一样 因此,我尝试使用GETDATE()动态创建此日期,而不必使用键入的版本。当我运行topSELECT语句时,它会像我预期的那样返回'20120423',但当我尝试比较这两个值时,它们不相等,并且IF语句会打印“值不相同” SELECT '''' +CONVERT(VARCHAR(8), DateAdd(YY,-2,GETDATE()

我在SQLServer中有一个视图,它使用日期来确定从哪些表访问数据。问题是,它似乎只有在将日期指定为
varchar
时才起作用,就像
'20120423'
一样

因此,我尝试使用
GETDATE()
动态创建此日期,而不必使用键入的版本。当我运行top
SELECT
语句时,它会像我预期的那样返回
'20120423'
,但当我尝试比较这两个值时,它们不相等,并且
IF
语句会打印
“值不相同”

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'

顶部搜索所有表格,底部搜索只正确搜索必要的表格。

删除前两个
。试试这个。 您正在比较
'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

删除前两个
。试试这个。 您正在比较
'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

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

我想你想要:

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

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

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

我想你想要:

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

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

你会被引号给甩了,把它们去掉吧,它们是不必要的

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 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

出于好奇,您是否尝试选择了
'''+-CONVERT(VARCHAR(8),DateAdd(YY,-2,GETDATE()),112)+''''
,以查看它实际上代表了什么?与您的问题无关,但您文章的第一句话表明您的数据库设计可能是次优的。因此,忽略数据库设计,我的编辑中的两个查询是否应该被视为相同的?只是出于好奇,您是否尝试选择了
''''CONVERT(VARCHAR(8),DateAdd(YY,-2,GETDATE()),112)+''以查看它实际代表的内容?与您的问题无关,但是你文章的第一句话表明你的数据库设计可能是次优的。因此,如果不考虑数据库设计,我的编辑中的两个查询是否应该被视为相同的?令我惊讶的是,如果CONVERT(VARCHAR(8),DateAdd(YY,-2,GETDATE()),112)=20120423 ie没有撇号,这同样有效。我想这是一个恰好看起来像数字的varchar。@JohnBarça之所以有效,是因为SQL会隐式地将字符串转换为一个数字,以便将其与数字进行比较。因此,在我编辑之后,这两个查询“应该”被正确地对待吗?令我惊讶的是,如果转换(varchar(8),DateAdd(YY,-2,GETDATE()),112),这同样有效=20120423,即不带撇号。我想这是一个恰好看起来像数字的varchar。@JohnBarça之所以有效,是因为SQL会隐式地将字符串转换为数字,以便将其与数字进行比较。所以在我编辑之后,这两个查询“应该”被视为相同的,对吗?