3

我们正在创建一个演示数据库。所以他们需要我将包含所有日期的列更改为特定日期。

只替换月份和日期并保持年份不变。

例如:2012 年 3 月 12 日、1990 年 6 月 19 日

解决方案:2012 年 1 月 1 日、1990 年 1 月 1 日

他们希望将月份和日期设为:01/01

我的查询如下:

update Tablename set column = REPLACE(column, select substring(column,1,5) from Tablename ,'01/01') ;

但我收到一个错误,如下所述:

Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'select'.
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '01/01'.

任何帮助/建议将不胜感激。

4

4 回答 4

4

不要使用字符串操作更改日期。它可以保证在路上打破东西,而且速度更慢。

UPDATE TableName
SET [column] = DATEADD(year,DATEDIFF(year,0,[column]),0)
于 2013-07-03T19:16:42.237 回答
1

从 SQL Server 2012 开始,有一个 DATEFROMPARTS 函数非常适合这个......例如......使用@originalDate DATE、@newMonth INT、@newDay INT,您可以像这样形成您的新日期:

DECLARE @replacedDate Date;

SET @replacedDate = DATEFROMPARTS(
                    DATEPART(year, @originalDate),
                    @newMonth,
                    @newDay
                )

你的sql是这样的:

update Tablename 
set column = DATEFROMPARTS(DATEPART(year, column),1,1)

这是 sql server 文档:

日期从零件 日期零件

于 2018-07-19T00:36:34.123 回答
0

只需删除错误的select

update Tablename
set column = REPLACE(column, substring(column,1,5) from Tablename ,'01/01');

但是,似乎更合适的方法是使用该DATEPART函数:

UPDATE Tablename
SET column = CAST('01/01/' + CAST(DATEPART(year, column) AS VARCHAR) AS DATETIME)
于 2013-07-03T18:15:09.317 回答
0

首先,如果要对其执行字符串操作,则需要将 DateTime 转换为 VARCHAR。其次,您不需要寻找SUBSTRING。只需使用 DateTime 格式更新 DateTime 列。

UPDATE TABLE SET ColumnName = CAST('Whatever Date You Want' AS DATETIME)
于 2013-07-03T18:20:27.937 回答