日期时间问题与SQL Server存储过程
当代码执行下面的代码不会出现运行:日期时间问题与SQL Server存储过程
存储过程的代码片段:
AND (@month_ref = 81201
AND tsks.grouping_ref = @grouping_ref
AND ts.start_dtm BETWEEN convert(datetime, '2011-11-28')
AND convert(datetime,'2012-01-01')
)
OR (@month_ref = 81202
AND tsks.grouping_ref = @grouping_ref
AND ts.start_dtm BETWEEN convert(datetime,'2012-01-02')
AND convert(datetime,'2012-01-29')
)...
服务器设置:
SQL Server设置为:
- 语言:英语(美国)
和Windows Server区域和语言设置为:
- 英语(美国)
我们的测试服务器设置为英国英文和存储过程似乎工作得很好。我有一种感觉,客户设置不喜欢日期。
DB设计/数据
ts.start_dtm
看起来像这样在数据库:
-
数据类型 - 日期时间
2011-04-01 00:00:00.000
所以其设置为 - YEAR | MONTH | DATE
我的存储过程将start_dtm
硬编码为'2012-01-02'
,它的格式也相同。
你能帮助我吗?
问题是网站尝试运行存储过程时失败。问题是数据转换。我不得不分配日期转换的格式。
根本不需要明确的日期转换。这是ISO8601格式,所以数据库应当了解其直客:
ts.start_dtm Between '2011-11-28' AND '2012-01-01'
如果你需要将它们转换,指定你用的是什么格式的字符串:如果你只是跳过
ts.start_dtm Between convert(datetime,'2011-11-28', 120) AND convert(datetime,'2012-01-01', 120)
120意味着什么? – 2012-03-01 10:52:18
120在本文的表格中解释http:// msdn.microsoft.com/en-us/library/ms187928。aspx – 2012-03-01 11:05:05
这解决了这个问题。当格式已经是ISO标准时,我仍然想知道为什么我需要120?我看到120指的是“ODBC规范 - yyyy-mm-dd hh:mi:ss(24h)” – 2012-03-01 11:31:29
会发生什么转换的东西? – 2012-03-01 10:45:44
我的问题将仍然存在...... :( – 2012-03-01 10:47:30
你还没有真正说过你得到了什么错误/问题 - 你能否更新这个问题来补充这个问题? – 2012-03-01 11:01:22