如何在SQL中连接

时间:2015-09-16 10:31:22

标签: sql sql-server sql-server-2012 concatenation

在SQL Server 2012中,我正在尝试选择多列并将它们连接起来,如下所示。

LTRIM(RTRIM(ISNULL(S.TITLE, ''))) + 
' ' + 
LTRIM(RTRIM(ISNULL(S.FIRSTNAME, ''))) + 
' ' + LTRIM(RTRIM(ISNULL(S.SURNAME, ''))) AS 'Full Name',

我遇到的问题是,如果第一列'TITLE'为NULL或Blank,那么下一列'FIRSTNAME'会因为连接而以空格开头。

有什么想法吗?

P.S - 这是我的第一个问题,如果我做错了,请道歉......

4 个答案:

答案 0 :(得分:1)

将整个内容包含在LTRIM(

LTRIM(LTRIM(RTRIM(ISNULL(S.TITLE, ''))) + 
' ' + 
LTRIM(RTRIM(ISNULL(S.FIRSTNAME, ''))) + 
' ' + LTRIM(RTRIM(ISNULL(S.SURNAME, '')))) AS 'Full Name',

答案 1 :(得分:1)

您可以在整个表达式周围使用ltrim()解决该问题:

LTRIM(LTRIM(RTRIM(ISNULL(S.TITLE, ''))) + ' ' + LTRIM(RTRIM(ISNULL(S.FIRSTNAME, ''))) + ' ' + LTRIM(RTRIM(ISNULL(S.SURNAME, '')))) AS [Full Name],

有用的提示:不要使用单引号作为列别名。虽然这有时会起作用,但在其他时候,代码将无法满足您的期望。仅对字符串和日期常量使用单引号。

还有其他方法,例如在测试之前添加空格

(COALESCE(LTRIM(RTRIM(s.Title)) + ' ', '') +
 COALESCE(LTRIM(RTRIM(S.FirstName)) + ' ', '') +
 COALESCE(LTRIM(RTRIM(s.SurName)), '')
)

如果没有名字,这有处理双空格的优点。但是,您需要rtrim()表示整个表达式不能处理姓氏。

答案 2 :(得分:0)

如下所示使用它。为清楚起见,我省略了LTRIM()RTRIM()。并使用COALESCE() insted ISNULL()

SELECT
   COALESCE( s.Title + ' ', '') + COALESCE( s.Firstname + ' ', '') +
   + COALESCE( s.surname, '')

COALESCE()内使用修剪。例如;

COALESCE( LTRIM(RTRIM( s.Title)) + ' ', '')

答案 3 :(得分:0)

使用sqlserver 2012中引入的CONCAT可以很容易地解决这个问题。

SELECT 
  CONCAT(LTRIM(RTRIM(S.TITLE)) + ' ', 
    LTRIM(RTRIM(S.FIRSTNAME)) + ' ', 
    LTRIM(RTRIM(S.SURNAME))) AS [Full Name]
FROM ..