日期时间在不同的计算机上表现得很奇怪

时间:2015-05-18 22:07:30

标签: c# sql sql-server

我试图制作一个会对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数据类型转换为日期时间数据类型会导致超出范围的值。

拜托,任何帮助都会很棒!

2 个答案:

答案 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允许第三个参数指示日期格式。