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'等。
答案 0 :(得分:32)
您需要将日期时间值括在引号中:
DECLARE @Test AS DATETIME
SET @Test = '2011-02-15'
PRINT @Test
答案 1 :(得分:14)
首先 - 在日期文字周围使用单引号!
其次,我强烈建议您始终使用ISO-8601日期格式 - 无论SQL语言环境中的语言环境,区域或语言设置如何,都可以使用。
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,但您可能想记住的很少
请注意,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