问题 SQL Server:连接多个列的最佳方法?


我试图连接SQL Server 11.00.3393中的查询中的多个列。

我尝试了新功能 CONCAT() 但是当我使用两列以上时它不起作用。

所以我想知道这是否是解决问题的最佳方法:

SELECT CONCAT(CONCAT(CONCAT(COLUMN1,COLUMN2),COLUMN3),COLUMN4) FROM myTable

我不能用 COLUMN1 + COLUMN2 因为 NULL 值。

编辑

如果我试试 SELECT CONCAT('1','2','3') AS RESULT 我收到一个错误

CONCAT函数需要2个参数


8918
2018-06-23 16:40


起源

CONCAT功能是 不限于两个论点 所以这不太可能是你的问题。你可以随时使用 SET CONCAT_NULL_YIELDS_NULL OFF 避免出现问题 NULL - GarethD
我猜你在某处有语法错误。你可以发布剩下的代码吗? - SQLChao
@JChao我只是尝试选择SELECT CONCAT('1','2','3') - D. Caan
您使用的是本机concat函数,还是 典范 一个(SELECT { fn CONCAT('A', 'B', 'C') }; 要么 SELECT CONCAT('A', 'B', 'C'),前者只允许两个参数,后者接受一个变量号。 - GarethD
CONCAT() 在SQL 2012中引入,因此VS 2010将其转换为它所知道的内容是有道理的。 - Hart CO


答案:


通过话语很清楚,问题在于使用VS2010来编写查询,因为它使用了规范 CONCAT() 功能限于2个参数。可能有一种方法可以改变它,但我不知道它。

替代:

SELECT '1'+'2'+'3'

此方法需要将非字符串值转换/转换为字符串,以及 NULL 通过处理 ISNULL() 要么 COALESCE()

SELECT  ISNULL(CAST(Col1 AS VARCHAR(50)),'')
      + COALESCE(CONVERT(VARCHAR(50),Col2),'')

12
2018-06-23 17:03





SELECT CONCAT(LOWER(LAST_NAME), UPPER(LAST_NAME)
       INITCAP(LAST_NAME), HIRE DATE AS ‘up_low_init_hdate’)
FROM EMPLOYEES
WHERE HIRE DATE = 1995

2
2018-05-16 17:23





尝试使用以下:

SELECT 
    (RTRIM(LTRIM(col_1))) + (RTRIM(LTRIM(col_2))) AS Col_newname,
    col_1,
    col_2 
FROM 
    s_cols 
WHERE
    col_any_condition = ''
;

0
2018-02-02 11:16





大段引用

使用串联 Oracle SQL 很容易也很有趣。但是对MS-SQL了解不多。

大段引用

在这里我们选择Oracle: 句法: SQL> select First_name||Last_Name as Employee from employees;

结果:员工

EllenAbel SundarAnde MozheAtkinson

这里AS:关键字用作别名。 我们可以连接 空值 值。 例如:columnm1 || Null

假设您的任何列都包含 空值 然后,结果将仅显示具有值的该列的值。

你也可以使用 文字字符串 在连接中。

例如 select column1||' is a '||column2 from tableName; 结果:column1是column2。 文字之间应该用单引号括起来。你cna排除数字。

注意:这仅适用于oracle服务器// SQL。


0
2018-02-15 08:18





如果字段可以为空,那么您将必须处理这些空值。请记住,null是具有传染性的,并且 concat('foo', null) 只是导致 NULL 以及:

SELECT CONCAT(ISNULL(column1, ''),ISNULL(column2,'')) etc...

基本上测试每个字段的空值,如果是,则替换为空字符串。


-3
2018-06-23 16:44



在里面 CONCAT功能 空值被隐式转换为空字符串,这不是必需的。 - GarethD