为什么在 getdate() 上使用 left() 会将其更改为不同的数据类型?

Why does using left() on getdate() change it to a different data type?

运行 两个简单的 select 语句:

SELECT GETDATE() 

SELECT LEFT(GETDATE(), 10)

Returns:

2015-10-30 14:19:56.697 

Oct 30 201

我期待 LEFT() 给我 2015-10-30,但事实并非如此。

有谁知道为什么?是不是跟数据类型GETDATEreturns的样式有关?

谢谢!

GETDATE() returns 一个 datetime 值。当您执行 SELECT GETDATE() 时, 应用程序 会获取日期时间值并确定如何显示它。您正在使用的应用程序明智地选择了 ISO 标准格式。

当您执行 LEFT(GETDATE() 时, 数据库 需要执行从 datetime 到某个字符串值的隐式转换。为此,它使用其国际化设置。您所看到的是基于这些设置。

故事的寓意:避免隐式转换。始终明确说明您在做什么,尤其是在诊断能力相当差的 SQL 中。因此,请使用 CONVERT() 以及您想要执行的适当格式。

GETDATE() 命令 returns a DATETIME,你想要 return DATE

SELECT CONVERT(DATE,GETDATE());