在CONCAT中使用Collat​​e

Car*_*rel 14 sql-server concat collate sql-server-2012

我试图在两列之间用空格连续排列并得到一个排序错误:

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
Run Code Online (Sandbox Code Playgroud)

在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,
Run Code Online (Sandbox Code Playgroud)

或者其他的东西?

Stu*_*tLC 14

你把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
Run Code Online (Sandbox Code Playgroud)

  • 您可能可以通过 DATABASE_DEFAULT 整理来避免整理文字,即`SELECT DISTINCT CONCAT(p.FULLNAMES COLLATE DATABASE_DEFAULT, (CONCAT(' ', p.SURNAME COLLATE DATABASE_DEFAULT))) AS NAME FROM Person p` (2认同)

t-c*_*.dk 5

这将解决您的问题:

SELECT CONCAT(p.FULLNAMES,' ' collate Latin1_General_CI_AS,p.SURNAME) AS NAME
Run Code Online (Sandbox Code Playgroud)

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