-2

我的查询有一个小问题。我在本地开发服务器上的数据库使用法语日期格式 ( dd/mm/yyyy),但我的发布服务器使用北美格式 ( mm/dd/yyyy)。

所以这会引发错误

SELECT CodPeriodoInsc, 
       CONVERT(VARCHAR, FechaDesde, 103) AS FechaDesde, 
       CONVERT(VARCHAR, FechaHasta, 103) AS FechaHasta 
FROM SedesPeriodosInscripcion
WHERE FechaDesde <= '25/06/2012'

但它适用于开发,这适用于发布

SELECT CodPeriodoInsc,
       CONVERT(VARCHAR, FechaDesde, 103) AS FechaDesde, 
       CONVERT(VARCHAR, FechaHasta, 103) AS FechaHasta 
FROM SedesPeriodosInscripcion
WHERE FechaDesde <= '06/25/2012'

但它对开发不起作用。

有没有办法可以使查询在两个数据库上都有效?

4

2 回答 2

5

如果您传入05/06/2012,您的代码应该如何知道这意味着 5 月 6 日还是 6 月 5 日?它不能。

解决方案是首先停止以这些格式传递/存储日期。如果您20120605在所有服务器上输入 6 月 5 日,则无论区域设置、排序规则、语言、日期格式设置等如何...

所以你应该总是说:

WHERE FechaDesde <= '20120625'
于 2012-06-25T20:10:47.720 回答
3

您可以选择一种格式并使用SET DATEFORMAT

但是你总是可以为你的日期文字选择一个规范的格式,比如:yyyyMMdd,在你的情况下是'20120625' 这些永远不会模棱两可(甚至对于人类来说也是如此)。

如果您使用的是 SQL Server 2012,则使用ISO格式或使用DATETIMEFROMPARTS来构造日期。

于 2012-06-25T20:17:30.853 回答