我在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。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
答案 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)