(SQL server)从temp列中仅获取datetime格式的日期,将它们转换为int并将它们放在另一列中

时间:2012-03-12 16:30:38

标签: sql sql-server-2008-r2

我是所有这一切的新手所以我遇到了一些问题(我只使用了几次SQL服务器) 我创建了新表,我从另一个服务器上的另一个数据库中的表中导出数据。一切都很好。但是,在新表中,我需要使用数据类型int(YYYYMMDD),而后者则作为日期时间存储在原始表中。我想我可以使用临时表来导出日期时间格式化日期,然后将它们转换为输入到日期表中,但我现在有点卡住了。

这是我到目前为止所做的事情(包含错误)

DECLARE @count int;
SET @count = 0;

DECLARE @NUMOFROWS int;
SET @NUMOFROWS = ( SELECT COUNT(VENTES_CODE_ID) FROM ventes );

WHILE ( @count < @NUMOFROWS )
BEGIN
  DECLARE @Date datetime;
  SET @Date = ( SELECT TEMP FROM ventes WHERE row_number () = @count );

  SELECT into ID_DATE_IDDate AsInteger (
    SELECT COUNT(*) FROM ventese
    WHERE ID_DATE_is NOT LIKE NULL AS rownumber
  ) = CAST( CONVERT( varchar, @Date, 112 ) AS INT );

  @count++;
END

非常感谢!

2 个答案:

答案 0 :(得分:3)

有没有理由你不能同时做整套:

INSERT INTO DestinationTable (intcolumn)
SELECT CAST(CONVERT(varchar(8), datecolumn, 112) AS INT)
FROM SourceTable

答案 1 :(得分:0)

你可以尝试一些稍微简单的东西;创建一个转换两种方式的函数,以便您可以随意转换,并用于转换。

CREATE FUNCTION DATE2INT ( @date AS DATE ) RETURNS INT AS BEGIN
  RETURN CAST(CONVERT(VARCHAR(32), @date, 112) AS INT);
END;
GO

CREATE FUNCTION INT2DATE ( @date AS INT ) RETURNS DATE AS BEGIN
  RETURN CONVERT(DATE, CAST(@date AS VARCHAR(32)), 112);
END;
GO

SELECT DBO.DATE2INT(GETDATE());
> 20120312

SELECT DBO.INT2DATE(20120312);
> 2012-03-12

-- Add a month to your integer date
SELECT DBO.DATE2INT(DATEADD(MONTH, 1, DBO.INT2DATE(20121212)));
> 20130112