替换日期的某一部分

时间:2013-07-03 18:12:51

标签: sql sql-server

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

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

Ex:03/12 / 2012,06 / 19/1990

解决方案:01/01 / 2012,01 / 01/1990

他们希望将月份和日期设为: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 个答案:

答案 0 :(得分:3)

不要使用字符串操作更改日期。它保证能够在路上打破它并且速度更慢。

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

答案 1 :(得分: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)

答案 2 :(得分:0)

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

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

答案 3 :(得分: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文档:

DATEFROMPARTS DATEPART