SQL Server中的日期格式保持不变

SQL Server中的日期格式保持不变,sql,sql-server,Sql,Sql Server,我有一个字段ADATE,它是varchar(8),格式如下:yyyymmdd(20080402) 我想让它看起来像: 4/2/2008 我尝试了以下方法: select convert(varchar(8),adate,101) from myTable where AYEAR= ISNULL('2008', ayear) and active = 'y' 但结果仍然是: 20080402 如果我将convert语句更改为: convert(date,adate,101) 我总是得到:

我有一个字段ADATE,它是varchar(8),格式如下:yyyymmdd(20080402)

我想让它看起来像: 4/2/2008

我尝试了以下方法:

select convert(varchar(8),adate,101) from myTable
 where  
AYEAR= ISNULL('2008', ayear)
and active = 'y'
但结果仍然是:

20080402

如果我将convert语句更改为:

convert(date,adate,101)
我总是得到:

2008-04-02

无论我将格式数字更改为什么


我缺少什么?

您需要先将
数据转换为
日期时间,然后将其转换为所需格式:

select convert(varchar(10), cast(adate as datetime), 101)
from myTable
where AYEAR= ISNULL('2008', ayear)
  and active = 'y'
或:


请参见您需要先
数据转换为
日期时间
,然后才能将其转换为所需的格式:

select convert(varchar(10), cast(adate as datetime), 101)
from myTable
where AYEAR= ISNULL('2008', ayear)
  and active = 'y'
或:


请参见

第一次,您将字符串格式化为日期,第二次,您将日期格式化为字符串,因此请将它们组合起来:

select convert(varchar(10), convert(date, adate), 101)

第一次是将字符串格式化为日期,第二次是将日期格式化为字符串,因此将它们组合起来:

select convert(varchar(10), convert(date, adate), 101)

确切地说,
'2008'
怎么可能是空的?where子句的那部分有什么意义?2008是我作为参数传递的东西,我在这里写出来只是为了示例。不知道为什么要把我的查询分开,where子句不是问题。确切地说,
'2008'
怎么可能是空的?where子句的那部分有什么意义?2008是我作为参数传递的东西,我在这里写出来只是为了示例。不知道你为什么要把我的问题分开,where子句不是问题。哇,每次我回到这里,你都会在答案中贴出越来越多的帖子。非常感谢。我感谢你的帮助!我没意识到我必须转换两次才能让它工作。我想接下来的问题是:我是否进行转换或转换有关系吗?@TanyaXrum您可以使用
cast
convert
,我发布了两个版本,这样您就可以看到其中一个有工作。另外,如果您有日期数据类型(我相信是sql 2008=>),请使用它而不是日期时间,因为时间部分在这里是不相关的。@Syn123我使用了
datetime
,因为他们没有指定sql server的版本,但是如果是2008+,那么你可以转换为date。是的,他在代码中使用了日期类型,否则我就不会提到它。哇,每次我回到这里,你都会在答案中发布越来越多的内容。非常感谢。我感谢你的帮助!我没意识到我必须转换两次才能让它工作。我想接下来的问题是:我是否进行转换或转换有关系吗?@TanyaXrum您可以使用
cast
convert
,我发布了两个版本,这样您就可以看到其中一个有工作。另外,如果您有日期数据类型(我相信是sql 2008=>),请使用它而不是日期时间,因为时间部分在这里是不相关的。@Syn123我使用了
datetime
,因为他们没有指定sql server的版本,但如果是2008+,那么您可以强制转换为date。是的,他在代码中使用了日期类型,否则我不会提到它。