在CONCAT中使用Collat​​e

时间:2014-05-15 08:33:54

标签: sql-server sql-server-2012 concat collate

我试图将两列之间用空格连接起来并得到排序错误:

SELECT DISTINCT
    p.PERSON_ID,
    p.ID_NUMBER,
    CONCAT(p.FULLNAMES, CONCAT(' ', p.SURNAME)) AS NAME,
    o.ORG_NAME,
    w.WARD_DESCRIPTION AS WARD,
    ess.DESCRIPTION AS SECTOR
  

无法在concat操作中解决“SQL_Latin1_General_CP1_CI_AS”和“Latin1_General_CI_AS”之间的排序规则冲突

我的数据库中两个违规列的整理是:Latin1_General_CI_AS

然后我试图将空白整理到这个整理,但我不知道如何做到这一点。我的尝试:

CONCAT(p.FULLNAMES, (CONCAT((COLLATE Latin1_General_CI_AS = ' '), p.SURNAME))) AS NAME,

还是什么?

3 个答案:

答案 0 :(得分:13)

你在每个字段之后放置了COLLATE,即最糟糕的情况:

SELECT DISTINCT
    CONCAT(p.FULLNAMES COLLATE Latin1_General_CI_AS, 
      (CONCAT(' ' COLLATE Latin1_General_CI_AS, 
          p.SURNAME COLLATE Latin1_General_CI_AS))) AS NAME
FROM Person p

答案 1 :(得分:3)

这将解决您的问题:

SELECT CONCAT(p.FULLNAMES,' ' collate Latin1_General_CI_AS,p.SURNAME) AS NAME

空间的默认排序规则与数据库相同,因此它必须与列具有相同的排序规则。在我看来有点傻了

答案 2 :(得分:0)

我通过简单地使用concat运算符解决了这个问题:

p.FULLNAMES + ' ' + p.SURNAME