SQL Server - 将数据类型nvarchar转换为bigint

时间:2016-12-21 14:05:21

标签: sql sql-server

当我使用SELECT *运行以下查询时,我收到错误消息:

  

[S0005] [8114]将数据类型nvarchar转换为bigint时出错。

SELECT * FROM (
                SELECT * , ROW_NUMBER() OVER (ORDER BY CAST(id as BIGINT)) AS RowNum
                FROM users
            ) AS users
            WHERE users.RowNum BETWEEN 0 AND 5 ;

当我仅使用SELECT id , ROW_NUMBER() ...运行此查询时,一切正常。

我的数据库看起来像这样:

Image of database

此查询适用于id列为NVARCHAR

的其他表格

ID列仅为数字,如果我将其转换为:CAST(id为NVARCHAR)我得到相同的错误。

编辑:

我发现列ID值存在问题

人名46903836 ID 9100000004

小ids没有前导零

3 个答案:

答案 0 :(得分:2)

通常当我收到此错误时,这是​​因为列的正面或末尾有空格。以下是我修复它的方法。

SELECT * FROM (
            SELECT * , ROW_NUMBER() OVER (ORDER BY CAST(LTRIM(RTRIM(id)) as BIGINT)) AS RowNum
            FROM users
        ) AS users
        WHERE users.RowNum BETWEEN 0 AND 5 ;

这将确保ID只是数字我也假设没有任何带有ID的字母字符。

答案 1 :(得分:1)

您的ID字段为BIGINT(您已发布表格结构),这不会导致您的问题出错。

但是,因为CAST是不可用的,你可以按如下方式重写你的查询:

SELECT * FROM (
    SELECT * , ROW_NUMBER() OVER (ORDER BY id) AS RowNum
    FROM users
) AS users
WHERE users.RowNum BETWEEN 0 AND 5 ;

答案 2 :(得分:1)

您不需要转换id列,因为它已经是bigint数据类型

SQL server database]