【问题标题】:SQL Server 2008 Express CONCAT() doesn't exist?SQL Server 2008 Express CONCAT() 不存在?
【发布时间】:2012-01-22 18:44:27
【问题描述】:

我正在从 MySQL 切换到 SQL Server 2008 Express,但似乎找不到 CONCAT()-esque 函数。我有两列正在尝试组合成一个字符串并找到唯一的组合。

id1          id2
001          abc1
002          qrs5
003          qrs5
003          abc1
...           ...

当我尝试以下操作时:

  select id1, id2, concat(id1,  ", ", id2) as combo1
  FROM db1
  group by combo1

我收到以下错误消息:

消息 195,第 15 级,状态 10,第 1 行
'concat' 不是可识别的内置函数名。

有什么建议吗?

【问题讨论】:

标签: sql sql-server


【解决方案1】:

也许是这样的,

SELECT DISTINCT id1, id2, id1 + ', ' + id2

这行得通吗?

【讨论】:

  • 不这么认为。 id1 和 id2 有重叠。我需要组合字符串是唯一的,而不仅仅是 id1。
  • @screechOwl:Bassam 的建议只是替代CONCAT()。它做同样的事情:+ 表示当操作数是字符串时在 T-SQL 中的连接。
  • 我正在查找 CONCAT,它似乎并没有检测到它自己的唯一性。在您的示例数据中,您可以举一些例子说明您的非唯一输入可能是什么,以及您需要什么结果是也许我们可以帮助你
  • 好的,谢谢,我仍然习惯于 SQLS 不那么冗长的语法。那行得通。非常感谢。
  • 我认为我们可以使用它来代替 CONCAT() 函数,对吧...?
【解决方案2】:

你可以在 SQL 2008 中使用 CONCAT(如果你真的想要的话),方法是用括号括起来

{fn CONCAT(id1,id2)} AS combo1

注意:CONCAT 只接受两个参数,因此如果您希望连接两个以上的字符串,则必须嵌套它们:

{fn CONCAT(id1,{fn CONCAT(id2,id3)})} AS combo2

【讨论】:

  • 这行得通。但它实际上是什么意思?如果这样使用,它对 2012 版本有何影响?
  • 这是 ODBC 语法更多信息 here,我不确定 2012 年。
  • 注意这里只支持两个参数,不支持任意长度
【解决方案3】:

CONCAT在 SQL Server 2008 中不存在,它是自 SQL Server 2012 以来新增的。

你可以改用:

select id1, id2, id1 +  ", " + id2 as combo1
FROM db1
group by combo1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 2011-12-14
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多