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

S.B*_*ley 7 sql sql-server getdate

运行两个简单的select语句:

SELECT GETDATE() 

SELECT LEFT(GETDATE(), 10)
Run Code Online (Sandbox Code Playgroud)

返回:

2015-10-30 14:19:56.697 

Oct 30 201
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢!

Gor*_*off 9

GETDATE()返回一个datetime值.当您这样做时SELECT GETDATE(),应用程序将获取日期时间值并确定如何显示它.您正在使用的应用程序明智地选择ISO标准格式.

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

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

  • 这个https://msdn.microsoft.com/en-AU/library/ms187928.aspx说默认转换是0而不是国际化设置 (2认同)