我将开始日期和结束日期参数传递给我的存储过程。我在这里做一个简单的测试:
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
会出现什么问题吗?
答案 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