SQL - конвертировать INT в дату - PullRequest
1 голос
/ 08 июля 2019

Я пытаюсь преобразовать значение INT (ГГГГММ) в ДАТУ.

Я прочитал статьи, в которых упоминается, что конвертируется из формата char в дату. Так что мне любопытно узнать - кто из следующих. хороший подход?

Пример:

DECLARE @PERIOD INT ='201806'

SELECT CAST(CONCAT(@Period,'01') AS DATE) SQLCAST1
,CAST(CAST(@Period AS varchar(6))+'01'  AS DATE) SQLCAST2

Какой идеальный подход и почему? У нас есть другой лучший подход?

Ответы [ 3 ]

5 голосов
/ 08 июля 2019

Я не фанат неявных преобразований типов данных, поэтому я бы сформулировал первое как:

select convert(date, convert(varchar(6),  @PERIOD ) + '01')

Или используйте datefromparts(), который является встроенной функцией для построения дат:

select datefromparts( @PERIOD / 100,  @PERIOD % 100, 1)
0 голосов
/ 08 июля 2019

Очевидно, что concat - самый эффективный метод.

https://raresql.com/2013/03/12/sql-server-string-concatenation-faster-method/

Приведение также является наиболее эффективным методом анализа стандартной строки даты (см. Времена try_cast для DateTime)

SQL - конвертировать INT в дату

Ваш первый метод наиболее эффективен.

0 голосов
/ 08 июля 2019

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

    declare @intValue int
    select @intValue = 201907
   select convert(date, convert(varchar(6),  @intValue ) + '01')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...