我怎样才能从datetime列获取日期?

时间:2013-11-15 21:48:44

标签: sql-server sql-server-2008

我有以下查询

SELECT GETDATE()

返回2013-11-16 03:31:07.740 我只想要DATE部分并省略Time部分。

我用过

select convert(varchar, getdate(), 100) convertResult,100 style union
select convert(varchar, getdate(), 101),101 union
select convert(varchar, getdate(), 102),102 union
select convert(varchar, getdate(), 103),103 union
select convert(varchar, getdate(), 104),104 union
select convert(varchar, getdate(), 105),105 union
select convert(varchar, getdate(), 106),106 union
select convert(varchar, getdate(), 107),107 union
select convert(varchar, getdate(), 108),108 union
select convert(varchar, getdate(), 109),109 union
select convert(varchar, getdate(), 110),110 union
select convert(varchar, getdate(), 111),111 union
select convert(varchar, getdate(), 112),112 union
select convert(varchar, getdate(), 113),113 union
select convert(varchar, getdate(), 114),114  union
select convert(varchar, getdate(), 120),120  union
select convert(varchar, getdate(), 121),121  union
select convert(varchar, getdate(), 126),126  union
select convert(varchar, getdate(), 127),127  union
select convert(varchar, getdate(), 130),130  union
select convert(varchar, getdate(), 131),131
order by 2

但是没有任何组合只给我一个日期部分。

3 个答案:

答案 0 :(得分:9)

最有效的方法是保持日期类型而不是将其转换为字符串:

SELECT CONVERT(DATE, GETDATE());

如果您因任何原因确实需要字符串输出:

SELECT CONVERT(CHAR(10), GETDATE(), 120);

(没有理由使用VARCHAR,并且获取字符串特定长度的方法是指定字符串的长度。Please read this post。)

accepted and highly up-voted answer on the proposed duplicate - 我肯定最终会因为旅游因素而关闭这个问题 - 并没有充分解决这个问题。

  1. 它使用的技术是SQL Server 2000和SQL Server 2005的有效方法,但不适用于SQL Server 2008+,因为上述转换比执行日期数学更有效(差异可能微不足道) ,但这是事情的原则。)

  2. 它仍然在输出中返回时间(它只是在午夜而不是现在)。这里的OP不希望输出中包含时间(无论是实时还是午夜等)。

答案 1 :(得分:4)

由于您使用的是SQL Server 2008

SELECT cast(GETDATE() as DATE)

答案 2 :(得分:2)

SELECT CONVERT(VARCHAR(10), GETDATE(), 101) 

<强>返回

11/15/2013

SELECT CONVERT(VARCHAR(10), GETDATE(), 120)

<强>返回

2013-11-15