将SQL Server日期时间转换为较短的日期格式


82

datetime在SQL Server中有一列,可以给我这样的数据10/27/2010 12:57:49 pm,我想查询此列,但只让SQL Server返回日月和年-例如。2010 10 27或类似的东西。

我应该研究什么功能?

我应该尝试转换为其他日期数据类型吗?或者只是将其转换为字符串?


2
看一下这篇文章:msdn.microsoft.com/en-us/library/ms187928.aspx专门>日期和时间样式
猪鬃

6
哪个版本的SQL Server?SQL Server 2008引入了许多新的与日期和时间相关的数据类型,例如DATE-因此,如果您使用的是2008年,则可以使用SELECT CAST(YourDateTimeColumn AS DATE)并且只获取日期-没有时间部分。
marc_s 2012年


Answers:


121

看一下CONVERT。第三个参数是您要转换为的日期时间样式。

例如

SELECT CONVERT(VARCHAR(10), GETDATE(), 103) -- dd/MM/yyyy format

12
看来106是“ dd mon yy”,“ dd / MM / yyyy”是103
nahab 2012年

3
@nahab你是正确的。另外,我必须使用varchar(11)而不是varchar(10)来防止年份缩短(例如,我看到195而不是1953)
Henrov 2013年

6
另外,如果您想将结果格式化为mm / dd / yyyy,则可以使用101
iliketocode

57

试试这个:

print cast(getdate() as date )


5
我喜欢此选项,而不是接受的答案。它将列保留为日期格式,以便我的“排序依据”可以正常工作,而不仅仅是varchar。
Milne

2
这在SQL Server 2005及更早版本上不起作用。DATE数据类型是在SQL 2008中引入的
。– JerryOL

如上所述,获取日期数据类型确实很不错,但是当需要特定的格式(例如“ dd MM yyyy”)时,则需要更多。
Trincot

15

如果您需要日期格式的结果,则可以使用:

Select Convert(DateTime, Convert(VarChar, GetDate(), 101))

10

除了CAST和CONVERT,如果使用的是Sql Server 2008,则可以转换为日期类型(或使用该类型开头),然后有选择地再次转换为varchar:

declare @myDate date
set @myDate = getdate()
print cast(@myDate as varchar(10))

输出:

2012-01-17

6

对于SQL Server 2005,我将使用以下命令:

select replace(convert(char(10),getdate(),102),'.',' ')

结果:2015 03 05


5

如果您有一个datetime字段,其结果如下所示:2018-03-30 08:43:28.177

建议: 和你想的更改日期时间最新出现像二○一八年三月三十○日

cast(YourDateField as Date)

1
您尚未添加任何新内容,jabu.hlong已在4年前给出了此答案...
Pawel Czapski

无法保证日期将以OP的格式呈现。可能是yyyy-MM-dd,dd / MM / yyyy,dd / MM / yyyy 00:00:00或其他。
trincot

4

mm / dd / yy的最短日期格式可以通过以下方式获得:

Select Convert(varchar(8),getdate(),1)

0

只需添加日期关键字。例如从orderdate>'2014-10-01'按日期(orderdate)分组的订单中选择date(orderdate),count(1);

orderdate是日期时间。该查询将显示该日期而不是日期时间的订单。

在datetime列上应用的Date关键字会将其更改为短日期。


0

对于任何版本的SQL Server:dateadd(dd,datediff(dd,0,getdate()),0)


无法保证日期将以OP的格式呈现。可能是yyyy-MM-dd,dd / MM / yyyy,dd / MM / yyyy 00:00:00或其他。
特里科特

0

原始DateTime字段:[_Date_Time]

转换为Shortdate:'Short_Date'

CONVERT(date, [_Date_Time]) AS 'Short_Date'

这将返回一个日期数据类型,该数据类型将留给接口以呈现为字符串,因此很可能会产生“ 27/12/2018 00:00:00”。那不是OP所要求的。
特里科特

这是他想要得到的-dd / MM / yyyy; 这就是我的回答产生的结果2018-11-20
Yousef Albakoush 18/12/27

那么首先2018-11-20不是dd / MM / yyyy,而是yyyy-MM-dd。但是渲染实际上取决于系统(和语言环境)。在我的系统上,它还会产生小时,分钟和秒(全为零)。这是因为您没有告诉SQL如何将日期表示为字符串,并且OP需要精确的字符串格式。
特里科特

首先,2018-11-20是因为我的PC已配置为使用阿拉伯语; 其次,我将在更改个人计算机的短日期后尝试使用
Yousef Albakoush,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.