BigInt не будет конвертировать в правильный формат даты - PullRequest
0 голосов
/ 11 октября 2018

Итак, у меня есть запрос, который я пытаюсь написать, где есть два столбца, которые будут иметь переменные результаты.Один - это дата, а другой - время.Мой запрос будет выглядеть так:

Select Schedule ID , Job_Name , next_run_date , next_run_time

Значения будут различаться в зависимости от того, с какой базой данных я работаю.Например, [next_run_date] может = 20181014, а [next_run_time] может прочитать 1000, что будет 1 час ночи.Но если я запускаю его на другом сервере, он может иметь совершенно другой набор значений, но в том же формате.

Я безуспешно пытался преобразовать столбцы в формат даты / времени с помощью

CONVERT(varchar(10),CONVERT(date,[next_run_date],110),110) AS 'Next Run' 

И просто получить ' Явное преобразование из типа данных int в дату не допускается '

То, что я хотел бы показать, это [next_run_date] might = 10-14-2018 и [next_run_time] = 01:00.Просто не знаете, как правильно конвертировать это.Я не должен записывать privs в базу данных.Если я читаю правильно, по крайней мере, для столбца с датой, мне придется конвертировать из Bigin в Varchar в ToDate, но неясно, как полностью написать это.

Ответы [ 4 ]

0 голосов
/ 11 октября 2018

Для поля времени вы можете вставить в него :.
И ФОРМАТ для времени ниже 10:00.

И часть даты может быть сделана с 2 приведениями и CONVERT или FORMAT .

Дата от INT до VARCHAR в формате 'mm-dd-yyyy':

CONVERT(VARCHAR(10), CAST(CAST([next_run_date] AS VARCHAR(8)) AS DATE), 110)

Theвремя от INT до VARCHAR в формате 'чч: ми':

STUFF(CAST(FORMAT([next_run_time],'000000') AS VARCHAR(4)),3,0,':')

Пример фрагмента:

DECLARE @Table TABLE  (next_run_date INT, next_run_time INT);

INSERT INTO @Table (next_run_date, next_run_time) VALUES 
 (20180901,  13500)
,(20181015, 134200)
;

SELECT 
CONVERT(VARCHAR(10), CAST(CAST([next_run_date] AS VARCHAR(8)) AS DATE), 110) AS [Next Run Date],
STUFF(CAST(FORMAT([next_run_time],'000000') AS VARCHAR(4)),3,0,':') AS [Next Run Time]
FROM @Table

Возвращает:

Next Run Date   Next Run Time
-------------   -------------
09-01-2018              01:35
10-15-2018              13:42
0 голосов
/ 11 октября 2018

Вам нужно сначала преобразовать bigint в varchar, затем в дату:

CONVERT(date,CONVERT(varchar(10),[next_run_date]),110) AS 'Next Run'
0 голосов
/ 11 октября 2018

Вы также можете разбить число на части и создать дату и время.

DECLARE @Date INT=20181014
DECLARE @Time INT=123456

SELECT CONVERT(DATE,
    SUBSTRING(CONVERT(VARCHAR(20),@Date),1,4)+'/'+
    SUBSTRING(CONVERT(VARCHAR(20),@Date),5,2)+'/'+
    SUBSTRING(CONVERT(VARCHAR(20),@Date),7,2)
) AS [Date]

SELECT CONVERT(TIME,
    SUBSTRING(CONVERT(VARCHAR(20),@Time),1,LEN(CONVERT(VARCHAR(20),@Time))-4)+':'+
    SUBSTRING(CONVERT(VARCHAR(20),@Time),LEN(CONVERT(VARCHAR(20),@Time))-3,2)+':'+
    SUBSTRING(CONVERT(VARCHAR(20),@Time),LEN(CONVERT(VARCHAR(20),@Time))-1,2)
) AS [Time]
0 голосов
/ 11 октября 2018

выберите конвертирование (дата / время, приведение (20181014 как varchar), 102)

Примечание:

CAST является частью спецификации ANSI-SQL;тогда как, CONVERT нет.Фактически, CONVERT зависит от реализации SQL.Различия CONVERT заключаются в том, что он принимает необязательный параметр стиля, который используется для форматирования.

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