拆分日期时间并替换年份部分

时间:2016-02-02 09:26:52

标签: sql sql-server-2008 datetime

我需要分割像'01 / 12/15'这样的日期,并将年份部分从15改为2015年(即2015年12月1日)。我通过SQL查询得到了年份:

select YEAR('10/12/15')

它返回2015年。但我必须将15更换为2015年。我如何实现这一目标。 有人在这里请帮助我。提前谢谢..

编辑:

我也尝试过追查...

declare @date  varchar='10/12/2015' 
declare @datenew date

SELECT @datenew=CONVERT(nvarchar(10), CAST(@date AS DATETIME), 103)    

print @datenew

但它会抛出一些错误: 从字符串转换日期和/或时间时转换失败。

如何将varchar更改为日期并将其年份部分替换为4位数...请帮帮我..

DECLARE @intFlag INT,@date varchar(150),@payperiod numeric(18,0),@emp_Id  varchar(50)
SET @intFlag = 1  
declare @count as int set @count=(select count(*) from @myTable)  
WHILE   (@intFlag <=@count)  
BEGIN    
select @emp_Id=Employee_Id from @myTable where rownum=@intFlag     
select @date=attendance_date from @myTable where rownum=@intFlag    
declare @datenew datetime 
SELECT @datenew=convert(datetime,CONVERT(nvarchar(10), CAST(@date AS DATETIME), 103) ,103)    

它抛出错误“将varchar数据类型转换为日期时间数据类型导致超出范围的值。”

6 个答案:

答案 0 :(得分:1)

将Date对象强制转换为VARCHAR

的最简单方法
SELECT RIGHT(CAST(YEAR('10/12/15') AS VARCHAR), 2)

答案 1 :(得分:1)

'01/12/15'的数据类型是什么?

也许这会对你有所帮助:

SELECT YEAR(CAST('10/12/15' AS DATE))

答案 2 :(得分:1)

如果您想更改格式并获取varchar,请尝试使用:

SELECT CONVERT(varchar(10), CAST('10/12/15' AS DATETIME), 105)

我希望它有所帮助。

答案 3 :(得分:1)

如您所说,您的列位于varchar类型,请尝试以下

<强>查询

CREATE TABLE #temp
(
   dt VARCHAR(50)
);

INSERT INTO #temp VALUES
('01/12/15'),
('02/12/15'),
('03/12/15'),
('04/12/15'),
('05/12/15');

UPDATE #temp
SET dt = REPLACE(LEFT(dt, LEN(dt) - 2) 
       + CAST(YEAR(CAST(dt AS DATE)) AS VARCHAR(4)), '/', '-');

SELECT * FROM #temp;

修改

在声明变量@date时,您没有指定长度。
检查下面的sql查询。

declare @date  varchar(10)='10/12/2015' 
declare @datenew date
SELECT @datenew=CONVERT(nvarchar(10), CAST(@date AS DATETIME), 103)   
print @datenew

答案 4 :(得分:1)

您的查询问题是您没有指定varchar数据类型的长度:

declare @date  varchar(12)='10/12/2015' 
declare @datenew date

SELECT @datenew=CONVERT(nvarchar(10), CAST(@date AS DATETIME), 103)    

print @datenew

答案 5 :(得分:1)

尝试使用:

Declare @date  nvarchar(20)='10/12/15' 
Declare @datenew nvarchar(40)
SELECT @datenew=CONVERT(nvarchar(10), CAST(@date AS DATETIME), 103)    
Print @datenew