SQL Server 2008日期参数

时间:2015-08-17 02:40:08

标签: sql sql-server sql-server-2008

我将开始日期和结束日期参数传递给我的存储过程。我在这里做一个简单的测试:

DECLARE @StartDate DATE = '10/06/2013' --dd/mm/yyyy
SELECT @StartDate   -- this statement running successfully 

DECLARE @EndDate DATE = '30/06/2013'  --dd/mm/yyyy
SELECT @EndDate -- this statement giving error

此语句返回以下错误

  

Msg 241,Level 16,State 1,Line 2
  从字符串转换日期和/或时间时转换失败。

有人知道EndDate会出现什么问题吗?

3 个答案:

答案 0 :(得分:5)

我很确定错误就在这一行:

DECLARE @EndDate DATE = '30/06/2013'  --dd/mm/yyyy

不在SELECT上。 <{1}}是没有意义的,因为处理变量应该没问题。

我建议您使用SELECT格式。以下是我的偏好:

YYYYMMDD

但是,某些国际化设置可能会失败。记录以下内容始终有效:

DECLARE @EndDate DATE = '2013-30-06' ;

答案 1 :(得分:0)

'10 / 06/2013'表示2013年10月6日至2013年6月10日。与@EndDate '30 / 06/2013'相比,第30个月没有任何内容。

DECLARE @StartDate DATE='10/06/2013' 
DECLARE @DummyDate DATE = '2013-Oct-06'

IF @StartDate = @DummyDate
BEGIN
    SELECT 1
END

答案 2 :(得分:0)

默认情况下,sql server采用'yyyy-mm-dd'格式的日期值,

因此您需要遵循该格式,或者需要相应地转换日期格式。

T-SQL将字符串转换为datetime - SQL Server将字符串转换为日期

SELECT convert(datetime, '10/23/2016', 101) -- mm/dd/yyyy
SELECT convert(datetime, '2016.10.23', 102) -- yyyy.mm.dd
SELECT convert(datetime, '23/10/2016', 103) -- dd/mm/yyyy
SELECT convert(datetime, '23.10.2016', 104) -- dd.mm.yyyy
SELECT convert(datetime, '23-10-2016', 105) -- dd-mm-yyyy

-- mon types are nondeterministic conversions, dependent on language setting
SELECT convert(datetime, '23 OCT 2016', 106) -- dd mon yyyy
SELECT convert(datetime, 'Oct 23, 2016', 107) -- mon dd, yyyy

-- SQL string to datetime conversion without century - some exceptions
SELECT convert(datetime, '10/23/16', 1)   -- mm/dd/yy
SELECT convert(datetime, '16.10.23', 2)   -- yy.mm.dd
SELECT convert(datetime, '23/10/16', 3)   -- dd/mm/yy
SELECT convert(datetime, '23.10.16', 4)   -- dd.mm.yy
SELECT convert(datetime, '23-10-16', 5)   -- dd-mm-yy
SELECT convert(datetime, '23 OCT 16', 6)  -- dd mon yy
SELECT convert(datetime, 'Oct 23, 16', 7) -- mon dd, yy