【问题标题】:Where do I put the CONVERT statement to change DATETIME to just DATE in UPDATE Satement我在哪里放置 CONVERT 语句以在 UPDATE Satement 中将 DATETIME 更改为仅 DATE
【发布时间】:2014-07-19 09:48:49
【问题描述】:

我有一个以datetime 格式生成日期的查询...见下文。

UPDATE WCV_3
SET VISIT_1= #TEMP2.[FIRST SERVICE DATE] 
FROM WCV_3
JOIN #TEMP2 ON #TEMP2.UNIVERSALMEMBERID= WCV_3.UNIVERSALMEMBERID
WHERE #TEMP2.VISIT_CNT= 1 

返回:2013-01-03 00:00:00.000

什么是正确的 CONVERT 语句,我应该将它放在这个查询中的什么位置以仅返回 DATE 而不是时间部分?

我只想要2013/01/03

【问题讨论】:

  • visit_1 是什么类型? VARCHAR?
  • 如果Visit_1DateTime,它将始终保留时间。当您提取数据时,您要么需要将 Cast 作为 Date,要么将列定义更新为 Date 而不是 DateTime
  • 这是正确的......现在我如何将整个列更新为不同的格式?我有 ALTER TABLENAME ALTER COLUMNNAME SET DATA TYPE DATE... 但这会返回“DATE 不是可识别的 SET 语句”的错误

标签: tsql date datetime sql-server-2008-r2 sql-update


【解决方案1】:
UPDATE WCV_3
SET VISIT_1= cast(#TEMP2.[FIRST SERVICE DATE] as date)
FROM WCV_3
JOIN #TEMP2 ON #TEMP2.UNIVERSALMEMBERID= WCV_3.UNIVERSALMEMBERID
WHERE #TEMP2.VISIT_CNT= 1 

【讨论】:

  • 试过这个但给了我这个错误-->类型日期不是定义的系统类型。
  • 如果 VISIT_1 是日期时间,如果仍在录制 2013-01-03 00:00:00.000,则每次选择此列或更改数据类型时都需要进行转换
  • 是的,这正是我得到的,但我不想要时间只是日期部分
  • @IJ_05 SQL Server 是什么版本?类型 DATE 在 2008 年及以上
  • @IJ_05 你确定你的服务器是 2008R2 而不仅仅是你的管理工作室吗?无论如何,您的问题将持续存在,因为值存储为日期时间。每次选择此列或更改数据类型时都需要进行转换
【解决方案2】:

如果您使用 sql server 2008 +
Select Cast(getdate() as date)

,您可以使用强制转换将日期时间更改为日期

【讨论】:

  • RIGHT...但是它在我的查询中去哪里...在更新之前或之后或在查询本身内部?
  • 啊,我明白了。如果你做了以下 SET VISIT_1 =cast(#TEMP2.[FIRST SERVICE DATE] as date) 你会设置 Visit_1 = 到 First Service Date(没有时间)但是,如果是在设计中设置为 DateTime 列,它将始终返回 00:00:00,除非您在每次选择时将其格式化为日期。或者,您可以查看是否可以将该列更改为仅 Date 列,而不是 DateTime 列。
  • 将整个列更改为 datetime 的 date insetad ... 这是 ALTER COLUMN 语句吗?我该怎么写?
  • ALTER TABLE WCV_3 ALTER COLUMN VISIT_1 日期我建议先在测试环境中执行此操作。
  • YES @will 就是这样,但返回错误“找不到数据类型 DATE”!
猜你喜欢
  • 2021-05-02
  • 1970-01-01
  • 1970-01-01
  • 2017-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多