• (4.60)sql server isnull数据被截断


    【1】isnull 的作用

    在我们日常使用SQL中,isnull的作用就是判断第一个参数是否为 Null,如果是Null 值则使用第二个参数;

    测试数据:

    use test3
    create table test1(
    id int ,str char(100),str1 varchar(100)
    )
    
    insert into test1 values(1,'aaa','bbb'),(null,null,null)
    select * from test1

      

    select isnull(id,1),isnull(str,'b'),isnull(str,'c') from test1

      

    【2】问题所在 isnull 的数据类型会是参数1

    【2.1】数据被截断

    select isnull(id,1),isnull(str ,replicate('a',1000)),isnull(str1,replicate('dd',1000)) from test1

    如下图,

    isnull(str ,replicate('a',1000))

    我们明明是想要变成 1000个 a,结果只有100个,这是因为 str 字段数据类型是 char(100);

    同理

    isnull(str1,replicate('dd',1000))

    是想要变成 1000个 dd,最后也只有100个 d

      

     我们查看字段长度

    select datalength(isnull(id,1)),
    datalength(isnull(str ,replicate('a',1000))),
    datalength(isnull(str1,replicate('dd',1000)))
    from test1

       

     查看字符个数:发现确实是截断了,只有100个字符;

        

    【2.2】isnull(参数1,参数2),参数2与参数1数据类型必须相同

    (1)参数2 是  参数1 的可强转类型

    select isnull(id,'1'),isnull(str,'b'),isnull(str,'c') from test1

      

    如上图,就是因为 '1' 可以强行转换为数字1;

    (2)参数2 是  参数1 的非可强转类型

      

     如上图,本是 int 类型的 id 字段,isnull 变成 'a' 字符串,这是不行的,而且 'a' 无法强转成数字类型;

    【3】解决方案(避免被截断)

    其实就是把参数1的数据类型 变得更大,可以完全包含参数2 中的数据,这样就不会被截断

    (1)转成固定类型

      

     (2)转成变成类型

      

  • 相关阅读:
    跨公司销售利润中心替代
    [WCF学习笔记] 我的WCF之旅(1):创建一个简单的WCF程序
    linux操作常用命令
    java lambda表达式
    关于lock和synchronized的选择
    ssh免密登陆(简单快捷)
    su和sudo的区别
    Linux常用查找命令
    vmware完整克隆(linux)
    springboot2.0拦截器和webconfigure配置
  • 原文地址:https://www.cnblogs.com/gered/p/14689602.html
Copyright © 2020-2023  润新知