我有以下查询
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
但是没有任何组合只给我一个日期部分。
答案 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 - 我肯定最终会因为旅游因素而关闭这个问题 - 并没有充分解决这个问题。
它使用的技术是SQL Server 2000和SQL Server 2005的有效方法,但不适用于SQL Server 2008+,因为上述转换比执行日期数学更有效(差异可能微不足道) ,但这是事情的原则。)
它仍然在输出中返回时间(它只是在午夜而不是现在)。这里的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