我试图制作一个会对SQL Server进行一些查询的程序,由于某种原因代码有奇怪的行为,因为它会在我的两台计算机上创建不同的日期值。
这是代码行为怪异的一部分。
Query += " dbo.MensajesProcesados.SentDateTime BETWEEN CONVERT(VARCHAR, '" + FechaInicio.Value.ToUniversalTime().ToShortDateString() + "', 103) AND CONVERT(VARCHAR, '" + FechaFin.Value.ToUniversalTime().ToShortDateString() + "', 103)";
第一台计算机(工作)中的给了我:
BETWEEN CONVERT(VARCHAR, '5/18/2015', 103) AND CONVERT(VARCHAR, '5/19/2015', 103)
和第二台不工作的电脑:
BETWEEN CONVERT(VARCHAR, '17/05/2015',103) AND CONVERT(VARCHAR, '19/05/2015',103)
这个没有用,会输出以下错误
将varchar数据类型转换为日期时间数据类型会导致超出范围的值。
拜托,任何帮助都会很棒!
答案 0 :(得分:6)
为Sql Server
提供文化中立格式'yyyyMMdd'
:
Query += " dbo.MensajesProcesados.SentDateTime
BETWEEN '" + FechaInicio.Value.ToString("yyyyMMdd") + "'
AND '" + FechaFin.Value.ToString("yyyyMMdd") + "'";
答案 1 :(得分:4)
这与SQL Server的文化/语言有关。见这里:SQL Server Datetime issues. American vs. British?
set language us_english
declare @d datetime = '1929/12/18'
您可以按照问题中的解决方案并手动更改语言,或者您可以通过输入月份和年份来建立日期,因此没有翻译空间,请参阅此处的一些答案:Create a date with T-SQL
DECLARE @day int, @month int, @year int
SELECT @day = 4, @month = 3, @year = 2011
SELECT dateadd(mm, (@year - 1900) * 12 + @month - 1 , @day - 1)
尝试CONVERT而不是CAST。
CONVERT允许第三个参数指示日期格式。