如何在SQL Server 2008中设置DateTime变量?

时间:2011-08-25 09:45:27

标签: sql datetime

SQL Server 2008没有按照DateTime的预期执行操作。无论我使用什么日期格式,它都不允许我设置DateTime变量。

执行时:

DECLARE @Test AS DATETIME
SET @Test = 2011-02-15
PRINT @Test

我得到了输出:

Jun 18 1905 12:00AM

我已经检查了所有可以找到的区域设置&一切都好看。我也尝试将DateTime设置为各种文字替代品,例如'15 / 02/2011','2011-02-15 00:00:00'等。

10 个答案:

答案 0 :(得分:32)

您需要将日期时间值括在引号中:

DECLARE @Test AS DATETIME 

SET @Test = '2011-02-15'

PRINT @Test

答案 1 :(得分:14)

首先 - 在日期文字周围使用单引号!

其次,我强烈建议您始终使用ISO-8601日期格式 - 无论SQL语言环境中的语言环境,区域或语言设置如何,都可以使用。

ISO-8601 format是:

  • YYYYMMDD仅限日期(例如2011年8月25日20110825
  • YYYY-MM-DDTHH:MM:SS了解日期和时间(例如,{MBUust 25日的2011-08-25T14:15:00,下午14:15/2:15)

答案 2 :(得分:6)

2011-01-15 = 2011-16 = 1995。然后将其从一个整数隐式转换为一个日期,从1900年1月1日开始,给你第1995天。

您需要使用SET @test = '2011-02-15'

答案 3 :(得分:6)

尝试使用选择而不是打印

DECLARE @Test AS DATETIME 

SET @Test = '2011-02-15'

Select @Test

答案 4 :(得分:4)

只是解释:

2011-02-15字面上被解释为数学运算,答案是1994

然后,这被解释为自日期起源(1900年1月1日)以来的1994天。

1994天= 5年,6个月,18天= 1905年6月18日

因此,如果您不想在每次将日期与特定值进行比较时进行计算,请使用标准:将date对象的toString()函数的值与此字符串进行比较:

set @TEST  ='2011-02-05'

答案 5 :(得分:1)

你应该这样试试:

  DECLARE @TEST DATE
  SET @TEST =  '05/09/2013'
  PRINT @TEST

答案 6 :(得分:1)

 1. I create new Date() and convert her in String .
 2. This string I set in insert.

 **Example:**  insert into newDate(date_create) VALUES (?)";

 ...
 PreparedStatement ps = con.prepareStatement(CREATE))
        ps.setString(1, getData());
        ps.executeUpdate();
  ...}

   private String getData() {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-dd hh:mm:ss");
     return  sdf.format(new java.util.Date());
    }

 **It is very important format** = "yyyy-M-dd hh:mm:ss"

答案 7 :(得分:1)

CONVERT功能有帮助。请检查以下内容:

declare @erro_event_timestamp as Timestamp;
set @erro_event_timestamp = CONVERT(Timestamp,  '2020-07-06 05:19:44.380',  121);

我在这里找到的幻数121:https://www.w3schools.com/SQL/func_sqlserver_convert.asp

答案 8 :(得分:1)

您要明确显示格式/样式,而不要依赖基于本地设置的解释(本地设置可能会有所不同)。

DECLARE @Test AS DATETIME
SET @Test = CONVERT(DATETIME, '2011-02-15 00:00:00', 120) -- yyyy-MM-dd hh:mm:ss
SELECT @Test

虽然有plethora of styles,但您可能想记住的很少

  • 126(ISO 8601):yyyy-MM-ddThh:mm:ss(.mmm)
  • 120:yyyy-MM-dd hh:mm:ss
  • 112:yyyyMMdd

请注意,ISO 8601中的T实际上是字母T,而不是变量。

答案 9 :(得分:0)

检查此内容:

DECLARE
    @_month TINYINT         = 5,
    @_year SMALLINT         = 2020,
    @date_ref DATETIME      = NULL 


    IF @_year IS NULL
        SET @date_ref = GETDATE() - 430
    ELSE
    BEGIN
        SELECT @date_ref = CAST ( CAST ( @_year AS VARCHAR (4)) 
            + 
            CASE 
                WHEN @_month < 10 THEN '0' + CAST ( @_month AS VARCHAR(1)) 
                ELSE CAST ( @_month AS VARCHAR(2)) 
            END 
            + 
            '01' AS DATETIME )
    END