繁体   English   中英

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

[英]Datetime acting weird on different computers

我正在尝试制作一个程序,该程序将在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数据类型到datetime数据类型的转换导致值超出范围。

请,任何帮助将是巨大的!

Sql Server提供文化中立格式'yyyyMMdd'

Query += " dbo.MensajesProcesados.SentDateTime
BETWEEN '" + FechaInicio.Value.ToString("yyyyMMdd") + "' 
AND '" + FechaFin.Value.ToString("yyyyMMdd") + "'";

这与SQL Server的文化/语言有关。 请参阅此处: SQL Server日期时间问题。 美国与英国?

set language us_english
declare @d datetime = '1929/12/18'

您可以按照问题中的解决方案并手动更改语言,也可以通过输入月份和年份来构建日期,从而没有翻译的余地,请参见此处的一些答案: 使用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允许第三个参数指示日期格式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM