Sql 替换日期的某一部分

Sql 替换日期的某一部分,sql,sql-server,Sql,Sql Server,我们正在创建一个演示数据库。所以他们需要我把所有日期的列改成一个特定的日期 只替换月份和日期,保持年份不变 Ex:2012年12月3日、1990年19月6日 解决方案: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 1

我们正在创建一个演示数据库。所以他们需要我把所有日期的列改成一个特定的日期

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

Ex:2012年12月3日、1990年19月6日

解决方案: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'.
但我得到一个错误,如下所述:

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'.

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

只需删除错误的
选择

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)

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

UPDATE TABLE SET ColumnName = CAST('Whatever Date You Want' AS DATETIME)

不要使用字符串操作更改日期。这是保证打破东西的道路上,它的速度较慢

UPDATE TableName
SET [column] = DATEADD(year,DATEDIFF(year,0,[column]),0)

从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文档:


日期的列定义是什么样的?如果日期被保存为DateTime,则不能在不转换的情况下对其执行字符串操作。它只是日期。。我计划将其转换为字符串,然后执行替换为什么要尝试替换日期列?