为什么在 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
,但事实并非如此。
有谁知道为什么?是不是跟数据类型GETDATE
returns的样式有关?
谢谢!
GETDATE()
returns 一个 datetime
值。当您执行 SELECT GETDATE()
时, 应用程序 会获取日期时间值并确定如何显示它。您正在使用的应用程序明智地选择了 ISO 标准格式。
当您执行 LEFT(GETDATE()
时, 数据库 需要执行从 datetime
到某个字符串值的隐式转换。为此,它使用其国际化设置。您所看到的是基于这些设置。
故事的寓意:避免隐式转换。始终明确说明您在做什么,尤其是在诊断能力相当差的 SQL 中。因此,请使用 CONVERT()
以及您想要执行的适当格式。
GETDATE() 命令 returns a DATETIME,你想要 return DATE
SELECT CONVERT(DATE,GETDATE());
运行 两个简单的 select 语句:
SELECT GETDATE()
SELECT LEFT(GETDATE(), 10)
Returns:
2015-10-30 14:19:56.697
Oct 30 201
我期待 LEFT()
给我 2015-10-30
,但事实并非如此。
有谁知道为什么?是不是跟数据类型GETDATE
returns的样式有关?
谢谢!
GETDATE()
returns 一个 datetime
值。当您执行 SELECT GETDATE()
时, 应用程序 会获取日期时间值并确定如何显示它。您正在使用的应用程序明智地选择了 ISO 标准格式。
当您执行 LEFT(GETDATE()
时, 数据库 需要执行从 datetime
到某个字符串值的隐式转换。为此,它使用其国际化设置。您所看到的是基于这些设置。
故事的寓意:避免隐式转换。始终明确说明您在做什么,尤其是在诊断能力相当差的 SQL 中。因此,请使用 CONVERT()
以及您想要执行的适当格式。
GETDATE() 命令 returns a DATETIME,你想要 return DATE
SELECT CONVERT(DATE,GETDATE());