【问题标题】:Splitting a datetime and replace the year part拆分日期时间并替换年份部分
【发布时间】:2025-12-27 10:25:11
【问题描述】:

我需要拆分像“01/12/15”这样的日期,并将年份部分从 15 替换为 2015 年(即 01-12-2015)。我通过 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 数据类型转换为 datetime 数据类型导致值超出范围。”

【问题讨论】:

  • 是 10 月 12 日还是 12 月 10 日?
  • 我的日期是 2015 年 12 月 10 日

标签: sql sql-server-2008 datetime


【解决方案1】:

尝试使用:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      也许这会对你有所帮助:

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

      【讨论】:

      • 我需要更改日期 fromat.. 01/12/15 是 varchar。
      【解决方案4】:

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

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

      希望对你有帮助。

      【讨论】:

        【解决方案5】:

        正如您所说,您的专栏是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
        

        【讨论】:

          【解决方案6】:

          将 Date 对象转换为 VARCHAR 的最简单方法

          SELECT RIGHT(CAST(YEAR('10/12/15') AS VARCHAR), 2)
          

          【讨论】:

          • 是的。它返回 12-10-2015 .. 但这里的格式 MM-DD-YY,我需要 DD-MM-YY fromat。那我该怎么办?