【问题标题】:Concatenating Int columns连接 Int 列
【发布时间】:2011-08-17 16:26:03
【问题描述】:

我有一个名为 Field_Data 的表,表中的数据如下所示:

Date                          Track_ID          Item#
2011-02-25 00:00:00.000       70212             1
2011-02-25 00:00:00.000       70212             2
2011-03-09 00:00:00.000       70852             1
2011-03-09 00:00:00.000       70852             3

我正在尝试将输出作为:

Date                          Final_ID
2011-02-25 00:00:00.000       70212_1
2011-02-25 00:00:00.000       70212_2
2011-03-09 00:00:00.000       70852_1
2011-03-09 00:00:00.000       70852_3

我试着做这样的事情:

Select Date,Track_ID + '_' + Item# AS Final_ID
From Field_Data

但它给了我以下错误:

消息 245,第 16 级,状态 1,第 1 行
将 varchar 值“_”转换为数据类型 int 时转换失败。

谁能帮我解决这个问题?

【问题讨论】:

    标签: sql sql-server sql-server-2005 tsql sql-server-2008


    【解决方案1】:

    您需要将INT 字段转换为varchar

    Select Date,CAST(Trakc_ID as varchar(20)) + '_' + CAST(Item# as varchar(20)) as Final_ID
    From Field_Data
    

    【讨论】:

    • @Abe - 你上一轮赢了,所以我猜现在我们打成平手了。
    • 请不要使用没有长度的varchar。 sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/…
    • msdn.microsoft.com/en-us/library/ms177561.aspx MSDN 关于字符串连接的文章
    • @Aaron - 对于投射 int 的情况,这不会导致任何问题。
    • @Martin 是的,但我只是想鼓励大家进行良好的实践。新用户不必保留一份清单,说明哪些地方可以省略长度,哪些地方可能会咬到他们——问题的一部分是他们不知道所有不合适的情况。如果您想以这种方式编码并节省 4 个字符,请随意,请放心,我每次都会调用它。 :-)
    【解决方案2】:

    请注意任何新的页面访问者,在 SQL Server 12+ 中,有一个可用的 CONCAT 函数。

    SELECT CONCAT([Date], [TrackId], '_', [ItemNumber]) AS FinalId
    FROM FieldData
    

    【讨论】:

      猜你喜欢
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多