Установка даты / времени в SQL с использованием значений int? - PullRequest
0 голосов
/ 23 июня 2010

У меня есть следующие значения целочисленного типа в сценарии SQL: @year, @month, @day.Теперь я хочу преобразовать их в значение datetime.Должно быть легко, верно?

Ну, я просто просмотрел документацию по SQL и был очень удивлен, что не смог найти никакого способа сделать это, кроме преобразования в строку, а затем в datetime.1006 *

declare @dt datetime
set @dt= convert(varchar,@year)+'/'+convert(varchar,@month)+'/'+convert(varchar,@day)

Это ужасно !Наверняка должен быть способ преобразовать значения int прямо в дату-время?

Ответы [ 3 ]

1 голос
/ 23 июня 2010

Вы можете сделать это без преобразования в строку, как это.Это не единственная функция, которая была бы хороша, но она работает:

DECLARE
    @year   SMALLINT,
    @month  TINYINT,
    @day    TINYINT,
    @d      DATETIME

SET @year = 2010
SET @month = 6
SET @day = 23
SET @d = '1900-01-01'

SELECT
    DATEADD(dy, @day - 1, DATEADD(mm, @month - 1, DATEADD(yy, @year - 1900, @d)))
1 голос
/ 23 июня 2010

Не из коробки, но вы можете создать UDF, который делает это, например:

create function ints2date (@year int, @month int, @day int) 
returns datetime 
as begin
    declare @foo varchar (10)

    set @foo = convert (varchar, @year) + '-' +
               convert (varchar, @month) + '-' +
               convert (varchar, @day)
    return convert (datetime, @foo)
end
go               

select dbo.ints2date (2000,1,1)

Вы также можете сделать это более замысловатым (но, возможно, немного быстрее) способом с использованием dateadd /DatePart.Пример этого можно найти по адресу Создать дату с помощью T-SQL (stackoverflow.com).

0 голосов
/ 06 июля 2012

Еще один быстрый способ

DECLARE 
    @year   SMALLINT, 
    @month  TINYINT, 
    @day    TINYINT, 
    @d      DATETIME 

SET @year = 2010 
SET @month = 6 
SET @day = 23 

SELECT cast(cast(@year*10000+@month*100+@day  as char(8)) as datetime)

SELECT cast(ltrim(@year*10000+@month*100+@day)  as datetime)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...