首页 > 解决方案 > 参数数据类型 bigint 对子字符串函数的参数 1 无效

问题描述

我在 SQL Server 中有此代码,但在运行时出现上述错误,该NationalId列是int数据类型。

我应该使用什么转换来传递此错误,因为我认为NationalId需要进行转换

错误:参数数据类型 bigint 对子字符串函数的参数 1 无效

代码:

SELECT
    c.NationalId,
    CAST (CASE
             WHEN LEFT(c.NationalId, 1) = 3 
                THEN 2000 + SUBSTRING(c.NationalId, 2, 2)
                ELSE 1900 + SUBSTRING(c.NationalId, 2, 2) 
          END + '-' + SUBSTRING(c.NationalId, 4, 2) + '-' + SUBSTRING(c.NationalId, 6, 2) AS Date) AS Birthday,

标签: sql-servercasting

解决方案


试试这个:

SELECT c.NationalId
     , CAST (CASE
             WHEN LEFT(cast(c.NationalId as varchar(32)), 1)= 3 
                         THEN '20' + SUBSTRING(cast(c.NationalId as varchar(32)), 2, 2)
             ELSE '19' + SUBSTRING(cast(c.NationalId as varchar(32)), 2, 2) END 
                     + '-' + SUBSTRING(cast(c.NationalId as varchar(32)), 4, 2) 
                     + '-' + SUBSTRING(cast(c.NationalId as varchar(32)), 6, 2) AS date
                           ) AS Birthday

推荐阅读