SQL Server 2005 日期比较 - 排序问题

Posted

技术标签:

【中文标题】SQL Server 2005 日期比较 - 排序问题【英文标题】:SQL Server 2005 date comparison - collation issues 【发布时间】:2009-02-12 10:23:43 【问题描述】:

在我的数据库中,我有一个通过链接服务器选项从 Excel 工作表创建的表。

我现在正在尝试将其内容与我的一个主表进行比较。

我正在比较的表在同一个数据库中。

两个表都有一个日期列,两种类型都是日期时间,排序规则是SQL_Latin1_General_CP1_CI_AS,和DB一样。

服务器排序规则是 Latin1_General_CI_AS

但是,当我尝试运行比较表之间日期的查询时,我收到错误:

      Cannot resolve the collation conflict between
      "Latin1_General_CI_AS" and
      "SQL_Latin1_General_CP1_CI_AS" in the
      equal to operation.

我尝试过使用和不使用 COLLATE 选项,同时使用两种排序规则设置。

我的查询是:

select * , hxl.holiday_dt, 
datediff(d, h.holiday_dt collate SQL_Latin1_General_CP1_CI_AS, 
            hxl.holiday_dt collate SQL_Latin1_General_CP1_CI_AS)
from holiday h, Holiday_XL hxl
where h.currency_cd=hxl.currency_cd

事实上,任何涉及两个表的查询都会给出完全相同的排序规则错误,例如这个:

select count(*)
from Holiday_XL c
where c.currency_cd in (select distinct h.currency_cd from holiday h)

提前感谢您的任何想法。

问候, 克里斯

【问题讨论】:

【参考方案1】:

错误是在货币比较 h.currency_cd=hxl.currency_cd 上报告的,而不是在 datediff 上,因此请尝试对货币进行强制排序。

排序规则仅与字符(char、varchar、nvarchar)和文本类型相关。

【讨论】:

【参考方案2】:

在排序规则下并给出排序规则表级别,有很多提示和代码可用于网络搜索与排序规则的主题。

如果你有问题。将 excel 的内容插入到@table 或永久表中,并在选择比较时为该表提供排序规则

【讨论】:

以上是关于SQL Server 2005 日期比较 - 排序问题的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2005 排序规则问题

如何修改SQL Server2005排序规则

SQL Server 2005 自动更新的日期时间列 - LastUpdated

sqlserver2005 怎么取每周周一的日期

实体框架 - SQL Server 2005 - IIS 服务器日期时间问题

客户端排序规则和 SQL Server 2005