[英]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.