(SQL-сервер) Получить только даты из формата datetime из временного столбца, преобразовать их в int и поместить их в другой столбец - PullRequest
0 голосов
/ 12 марта 2012

Я новичок во всем этом, поэтому я столкнулся с несколькими проблемами (я использовал SQL-сервер только несколько раз). Я создал новые таблицы, в которые я экспортировал данные из таблиц, которые существуют в другой базе данных на другом сервере.Все работало нормальноОднако в новых таблицах мне нужно использовать тип данных int (ГГГГММДД), в то время как последний сохраняется как дата-время в исходной таблице.Я подумал, что могу использовать временную таблицу, в которую я буду экспортировать даты в формате datetime, а затем преобразовать их в, чтобы поместить в таблицу дат, но я как бы застрял прямо сейчас.

Вот что ядо сих пор (содержит ошибки)

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 ]

3 голосов
/ 12 марта 2012

Есть ли причина, по которой вы не можете сделать весь сет за один раз:

INSERT INTO DestinationTable (intcolumn)
SELECT CAST(CONVERT(varchar(8), datecolumn, 112) AS INT)
FROM SourceTable
0 голосов
/ 12 марта 2012

Вы можете попробовать что-нибудь немного проще; создайте функцию для преобразования в обе стороны, чтобы вы могли конвертировать туда и обратно по желанию, и используйте для конвертации.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...