我们正在创建一个演示数据库。因此,他们需要我将具有所有日期的列更改为特定日期。
只更换月份和日期,并保持年份不变。
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'.
任何帮助/建议都将不胜感激。
答案 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文档: