簡體   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