如何从SQL Server中的日期时间列中仅获取日期部分,而不使用0

时间:2016-03-07 11:37:11

标签: sql-server datetime

我在SQL Server中有一个datetime列。

看起来像2015-04-16 00:13:00.000

我想只获取日期组件:2015-05-01

我尝试按照以下方式应用演员

update dbo.MyTableDateOnly 
set START_DATE = CAST(START_DATE AS DATE) 
from dbo.MyTableDateOnly

但我得到如下,这让我感到困扰,因为当我复制到Excel时,我只看到零。我想看到的是日期部分,如上所述。

2015-05-01 00:00:00.000

另外,有没有办法将日期组件分成sql中的年,月和日列?

编辑:我正在使用Microsoft SQL Server。为了获得YEAR,MONTH和DAY的各个列,我根据一些回复尝试了这个。但是我收到了错误

ALTER TABLE dbo.MyTableDateOnly 
ADD ADMIT_YEAR varchar(100)

ALTER TABLE dbo.MyTableDateOnly 
ADD ADMIT_MONTH varchar(100)

ALTER TABLE dbo.MyTableDateOnly 
ADD ADMIT_DAY varchar(100)

UPDATE dbo.MyTableDateOnly 
SET ADMIT_YEAR = (SELECT DATEPART(year, START_DATE) 
                  FROM dbo.MyTableDateOnly)

我收到错误

  

Msg 512,Level 16,State 1,Line 24
  子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。

4 个答案:

答案 0 :(得分:1)

如果您只想要日期,那么只存储日期?

ALTER TABLE dbo.MyTableDateOnly ALTER COLUMN START_DATE DATE;

这样,您每次从表格中选择时,都不会CAST更新日期(不会产生任何效果),或CAST更新为DATE

对于问题的第二部分,不需要SELECT,否则您将返回表格中的每个START_DATE,每行更新:

UPDATE dbo.MyTableDateOnly SET ADMIT_YEAR = DATEPART(year, START_DATE );

答案 1 :(得分:0)

你有MySql和SQL Server标签,它们的工作方式不同。 我将讨论SQL Server,您可以在其中使用DATEPART指令

SELECT DATEPART(year, 01-12-2016), DATEPART(month, 01-12-2016), DATEPART(day, 01-12-2016);

https://msdn.microsoft.com/es-es/library/ms174420(v=sql.120).aspx

答案 2 :(得分:0)

UPDATE不起作用,因为基本数据类型是DateTIMe。 即START_DATE数据类型为DATETIME。因此,在选择我选择的查询中的数据时,您可以根据需要使用。为了转换它可以使用很多方法。在你的情况下下面的

    SELECT CAST(GETDATE() AS DATE)

答案 3 :(得分:0)

不要更改结构,而是查询格式化的值,例如:

select left(convert(nvarchar(10), start_date, 120), 10)