代码之家  ›  专栏  ›  技术社区  ›  Gabe

将varchar列与int列组合

  •  25
  • Gabe  · 技术社区  · 14 年前

    我在一个SQL表中有两列, fooId (int)和 fooName (VARCHAR)。

    有没有一种方法可以将它们都选为一列,中间有空格?

    select fooId + ' ' + fooName as fooEntity
    from mytable
    

    它们是不同的类型,所以我出错了。

    此字段将直接绑定到Web应用程序中的控件中。

    SQL Server 2008

    (我有点像SQL初学者)

    5 回复  |  直到 6 年前
        1
  •  35
  •   OMG Ponies    14 年前

    数据库之间的字符串连接是不同的,因此了解哪个数据库很有帮助,因为您需要知道:

    1. 连接方法/运算符
    2. 如果数据库处理隐式数据类型转换

    SQL Server 不将数值隐式转换为字符串值:

    SELECT CAST(fooid AS VARCHAR(10)) + ' ' + fooname
    

    …所以你需要使用 CAST (or CONVERT) 将数据类型显式更改为基于文本的数据类型。

    为了 Oracle和PostgreSQL ,使用双管道连接字符串:

    SELECT fooid || ' ' || fooname
    

    为了 MySQL ,您可以使用 CONCAT function :

    SELECT CONCAT(fooid, ' ', fooname)
    
        2
  •  2
  •   Alex W    14 年前

    试试这个:

    SELECT Convert( foold, SQL_CHAR ) + ' ' + fooName FROM mytable
    

    SELECT Cast( foold AS SQL_CHAR(10) ) + ' ' + fooName FROM mytable
    
        3
  •  0
  •   ozczecho    14 年前

    是的,只要绑定字段是字符串就可以了。

    你犯了什么错误?

        4
  •  0
  •   bluish dmajkic    11 年前

    我不确定它是否是标准的SQL,但是PostgreSQL使用 || 字符串连接的运算符。 + 表示数值相加。

        5
  •  0
  •   Sourcephy    6 年前

    我在MS SQL中使用此查询

    SELECT varcharColumn + CONVERT(VARCHAR(2), intColumn) AS foo
    

    假设varcharcolumn为空

    SELECT ISNULL(varcharColumn, '') + CONVERT(VARCHAR(2), intColumn) AS foo