【问题标题】:SQL int to string to datetimeSQL int 到字符串到日期时间
【发布时间】:2014-08-23 10:45:35
【问题描述】:

我有整数日期。

将整数转换为日期时间的最简洁方法是什么?

我用这种乱七八糟的方式:

CONVERT(DATETIME,  cast(source.Day as varchar(2)) + '/' + cast(source.Month as varchar(2)) + '/' + cast(source.Year as varchar(2)), 3),

【问题讨论】:

  • 你使用的是哪个 sql-server 版本?
  • 一种更清洁、更安全的做法是使用适当的数据类型存储您的日期,它是DATEDATETIME

标签: sql sql-server tsql datetime


【解决方案1】:

你可以使用DATEFROMPARTS函数:

SELECT DATEFROMPARTS ( 2010, 12, 31 ) AS Result;

注意,它仅在 2012+ 版本中可用。

【讨论】:

  • 另请注意,当年份存储为两位数时,它可能不会给出所需的结果,因为该方法不会添加 19 或 20 作为前缀,而是按原样使用年份,这意味着如果年份部分是 14,该方法将返回 0014。至少这是它在我的机器上的行为方式。
【解决方案2】:

你可以这样做

   Declare @date date, 
        @year INT = 2014,
        @Month INT = 10,
        @DateDay INT = 12,
        @parseDate char(20)

select @date = CONVERT(date, 
                CAST( Cast(@Year as char(4))
                         + Cast(@Month as char(2)) +
                          cast(@DateDay as char(2))  AS CHAR(12)), 112)
select @date

注意:我不处理 NULL 案例。

【讨论】:

【解决方案3】:

试试这个:

select CONVERT (datetime,convert(char(8),yourvalue))

【讨论】:

  • @rene:- 我没明白。问题中在哪里提到?我认为 OP 已尝试从源中获取月、日和年!
  • @R.T.它在他已经拥有的代码中。他将日、月和年转换为字符串并将它们连接起来。
【解决方案4】:

使用 R.T.s 解决方案这可能有效

CREATE TABLE DATA(yr int, mth int, dy int);
INSERT INTO DATA
VALUES (2014,10,15);

SELECT
      CONVERT (DATETIME,
                CONVERT(char(4), yr) + 
                CONVERT(char(2), mth) + 
                CONVERT(char(2), dy)
       ) as Result
FROM DATA

这还是有点乱,假设是一个 4 位数的年份整数。

这里的 SQL 小提琴:http://sqlfiddle.com/#!6/cbf62/2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-02
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    相关资源
    最近更新 更多