Как удалить дату из строки datetime в SQL SSIS? - PullRequest
4 голосов
/ 10 мая 2009

Я работаю над проектом хранилища данных и хотел бы знать, как (желательно в компоненте производного столбца в потоке данных) убрать фрагмент даты из записи SQL datetime.

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

Может ли кто-нибудь дать мне простую функцию для выполнения этого в производном преобразовании столбца?

Пример: преобразование даты и времени, например «12/02/2008 11:32:21 AM», в просто «11:32:21 AM».

Ответы [ 5 ]

7 голосов
/ 11 мая 2009

Я бы просто сделал приведение к типу DT_DBTIME (используя преобразование «Производный столбец» или «Преобразование типа»). DT_DBTIME содержит только часть (часы, минуты, секунды) даты / времени, поэтому вы избавитесь от части даты.

3 голосов
/ 27 июня 2012

На самом деле, если вы измените первые 2 выражения, как это: (DT_DBDATE)(DT_DATE)GETDATE() вместо (DT_DATE)(DT_DBDATE)GETDATE(), вы будете TRUNCATE время от поля даты.

Если выражение DT_DATE предшествует выражению DT_DBDATE, вы по-прежнему будете иметь часть времени на выходе, но она будет сброшена на все нули.

2 голосов
/ 19 октября 2011

Если вам нужно сделать это в выражении переменной, решение Майкла не будет работать, но вы можете использовать следующее выражение:

(DT_DATE)(DT_DBDATE)GETDATE()

(DT_DBDATE) преобразует текущую дату и время только в дату. Но новый тип данных не совместим с датой и временем SSIS. Поэтому вам придется использовать (DT_DATE) для преобразования в совместимый тип.

Предоставлено этим решением Russel Loski, который разместил его в своем блоге: http://www.bidn.com/blogs/RussLoski/ssas/1458/converting-datetime-to-date-in-ssis

1 голос
/ 17 ноября 2011

Столкнулся с этим при написании отчета для приложения планирования, требовалось время, которое хранилось как часть типа данных datetime. Я отформатировал datetime как 0, который дает вам этот месяц, ддгггг чч: miAM (или PM), и только что сделал подстроку того, что возвращало время только в формате AM / PM.

Пример ниже.

DECLARE @S DATETIME = GETDATE()

SELECT SUBSTRING(CONVERT(NVARCHAR(30), @S , 0) , 13 , 10) AS ApptTime
    , CONVERT(NVARCHAR(30), @S , 0) AS ApptDate
0 голосов
/ 11 мая 2009

Я лично использую ряд функций для этого. E.g.:

ALTER FUNCTION [dbo].[TIMEVALUE]
(
 @Datetime datetime
)
RETURNS datetime
AS
BEGIN
    RETURN (@Datetime - CAST(ROUND(CAST(@Datetime AS float), 0, 1) AS datetime))
END

Я бы хотел получить всю сумму кредита, но на самом деле это должно пойти на этого парня .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...