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

时间:2015-10-30 14:24:51

标签: sql sql-server getdate

运行两个简单的select语句:

SELECT GETDATE() 

SELECT LEFT(GETDATE(), 10)

返回:

2015-10-30 14:19:56.697 

Oct 30 201

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

有谁知道为什么?是否与数据类型GETDATE返回的样式有关?

谢谢!

2 个答案:

答案 0 :(得分:9)

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

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

故事的道德:避免隐含的转换。始终明确您正在做什么,特别是在具有相当差的诊断功能的SQL中。因此,请使用CONVERT()以适合您想要的格式。

答案 1 :(得分:0)

GETDATE()命令返回 DATETIME ,您想要返回 DATE

SELECT CONVERT(DATE,GETDATE());